所以我有一些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(应用程序),那么我几乎肯定会得到一个错误,因为设置有一个外应用程序的关键。我被告知,如果你添加
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;
这有点令人困惑。当你定义一个List<entities>
因为当你删除它包含列表中的实体,它变得更糟。它抱怨列表中存在关系的实体,您如何在这些关系上启用级联删除?
public class Blog: DbEntity
{
public string Name {get;set;}
public virtual Member {get;set;}
public List<Comment> Comments {get;set;}
}
我知道这似乎是一个很大的问题,但它是围绕在实体framework.Thank一个话题你随时花回答我的问题。