我一直在寻找关于Master-Detail转换以及如何使用Entity Framework(4.1)实现它。我有两个班:
[Table("master")]
public class Master
{
[Key]
[Column("id")]
public int id {get; set;}
public virtual ICollection<Detail> Children { get; set;}
}
[Table("detail")]
public class AuthGrantDetailEntity
{
[Key]
[Column("id")]
public int Id { get; set; }
[ForeignKey("MasterId")]
public virtual Master MasterEntity { get; set; }
}
所以,到这里一切看起来都不错。我一直在阅读很多关于这种情况的评论,但我没有找到答案(或者我可能不理解)。 如果我想插入Master和Detail,我确实理解并让它工作得很好。例如:
using (var repo = MasterRepository)
{
Master masterEntity = new Master();
master.id = 1;
Detail detailEntity = new Detail();
detailEntity.id = 1;
masterEntity.Children = new List<Detail>;
masterEntity.Childern.add(detailEntity);
repo.Add(masterEntity);
}
我的问题如下: 假设在插入Master和Detail并保存这些更改后,我必须添加一些属于之前插入的Master的新细节。为此,我必须检查Master是否存在以及是否存在添加新细节(所有这些都是通过编码。我现在正在这样做)。 EF是否有办法检查Master是否存在,然后使用上面编写的代码将新细节插入其中?有了这个,我的意思是重复使用上面编写的代码(或其他适用于我的情况的代码),以便无论Master是否存在都可以运行,并且不会出现重复的主键异常。
这样做的原因是我想从代码中删除一些逻辑并避免多个数据库访问。对于我在搜索中看到的内容,我认为可以做到,除非我手动检查Master是否存在,但我仍然希望你们中任何一个人遇到同样的问题,并找到解决方法。
问候,马蒂亚斯。