在一对一的关联关系中使用SoftDelete会报错

Topics: Developer Forum
Sep 8, 2012 at 1:00 AM
Edited Sep 8, 2012 at 1:04 AM

梁老师您好,我有一问题想请教一下您,现在我有两个表是一对一的关联关系,当我对Account的实例进行Delete操作的时候,会报如下错误:


“操作数类型冲突: real 与 uniqueidentifier 不兼容” 

纠结了好一阵子最后发现是以下代码的问题,如果在Account和AccountDetail中分别去除对应关联,Account才可正常进行软删除。

[SoftDelete]    
public class Account : DbObjectModel<Account,Guid>    {

[HasOne]        
public AccountDetail AccountDetail { get; set; }

}

public class AccountDetail : DbObjectModel<AccountDetail, Guid>    {

[BelongsTo]        
public Account Account { get; set; }

}

单元测试代码:

[TestMethod]       
public void TestMethod2()       
{            
Account account = Account.FindOne(Condition.Empty);            
account.Delete();  
}

请问我的代码是否存在什么问题?还是我删除的方式不对?

Sep 8, 2012 at 1:03 AM

你重载ondeleteing方法,先把子表清空

Sep 8, 2012 at 1:27 AM
Edited Sep 8, 2012 at 7:37 AM

不知道我有没有正解理解您的意思,我在Account实体里面重载了ondeleteing方法,如下:

 

protected override void OnDeleting()
{
        AccountDetail.Delete();
        base.OnDeleting();
 }

 

再执行单元测试还是会报同样的错误,另外,我只是想把Account表的数据进行软删除,而对于AccountDetail表的数据个人觉得最好不是不要去动它,万一想恢复某条已被删除的数据时,AccountDetail的相应数据就没了~

我也尝试过在AccountDetail表中添加了IsDeleted字段,相应代码也添加了[SoftDelete] 的特性,不过还是会报同样的错误,难道只能在重载方法中写Sql?

Sep 8, 2012 at 1:30 AM
Edited Sep 8, 2012 at 1:32 AM
你不要使用guid,使用普通的id测试下,我怀疑有可能是框架bug

 

Sep 8, 2012 at 7:35 AM

谢谢您的建议,不过我最后还是重写了Delete方法:

public new void Delete()
{
     DbEntry.Provider.ExecuteNonQuery(
         string.Format("UPDATE [{0}] SET IsDeleted = 1 WHERE Id='{1}'", 
              this.GetType().Name, 
              this.Id
         )
     );
 }