0

所以我有一些 POCO 课程:

public class Device : DbEntity
{
  public string DeviceName {get;set;}
}
public class AUT : DbEntity
{
  public string ApplicationName {get;set;}
}
public class Setup : DeviceAppDbEntity
{
  public bool Worked {get;set;}
}

public class DbEntity
{
  public Guid ID {get;set;}
}
public class DeviceAppDbEntity : DbEntity
{
  public virtual AUT ApplicationUnderTesting {get;set;}
  public virtual Device DeviceUnderTesting {get;set;}
}

因此,如果我想删除一个 AUT(应用程序),那么我几乎肯定会得到一个错误,因为 Setup 有一个 App 的外键。有人告诉我,如果你添加

public class DeviceAppDbEntity : DbEntity
{
  public virtual AUT ApplicationUnderTesting {get;set;}
  public Guid ApplicationUnderTestingId {get;set;} // THIS LINE ADDED

  public virtual Device DeviceUnderTesting {get;set;}
}

然后将启用级联删除。这个对吗?

当我现在访问设置时

_repository.Setups.FirstOrDefault(x => x.ID.Equals(setupID));

导航属性virtual AUT&virtual Device应该自动填写??会Guid ApplicationUnderTestingId自动填写吗?

当我想保存我的Setup实体时,我可以只填写 nav 属性吗?还是我也必须填写该Guid ApplicationUnderTestingId字段,还是我做相反的事情并且只填写Guid ApplicationUnderTestingId

entityToSave.AUT = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(vm.AppID));

或者

entityToSave.ApplicationUnderTestingId= vm.AppID;
entityToSave.AUT = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(vm.AppID));

或者

entityToSave.ApplicationUnderTestingId= vm.AppID;

这有点令人困惑。当您定义 a 时情况会变得更糟List<entities>,因为当您删除包含列表的实体时。它抱怨列表中的实体具有关系,您如何在这些实体上启用级联删除?

public class Blog: DbEntity
{
  public string Name {get;set;}
  public virtual Member {get;set;}

  public List<Comment> Comments {get;set;}
}

我知道这似乎是很多问题,但它围绕实体框架中的一个主题。感谢您随时回答我的问题。

4

1 回答 1

3

要回答这个问题。

Cascade On Delete当您执行导航属性时启用,例如

public virtual SomeClass {get;set;}
public Guid SomeClassId {get;set;}

您可以填写其中任何一个,它将保存到数据库中。

No Cascade On Delete

public virtual SomeClass SomeClass {get;set;}

当您从数据库中读取时,我的操作如下:

var item = _repository.SomeClasses.FirstOrDefault(x => x.Id.Equals(id));

导航属性只有在你想访问的时候才会填写,懒加载,因为我用了关键字virtual

就目前List<Post>而言,如果你这样做:

public class Post
{
    public virtual Blog Blog {get;set;}
    public Guid BlogId {get;set;}
}

那么当一个博客被删除时,与之相关的所有帖子都会被删除。我没有尝试看看如果你删除会发生什么BlogId,但我猜,当你删除博客时,不会删除任何帖子。但是,该Blog => Post模型并不是展示您为什么要这样做的模型。

我想我已经回答了我所有的问题。总而言之,这一切都取决于public Guid SomeClassId {get;set;}是否Cascade On Delete设置。

于 2013-05-15T17:20:38.197 回答