1

我一直在研究 Master-Detail relotionship 以及如何使用 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 是否存在,但我仍然希望你们中的任何人都面临同样的问题,并找到解决方法。

问候,马蒂亚斯。

4

0 回答 0