在实体框架上插入/更新主 - 详细信息

时间:2013-02-21 19:28:40

标签: c# entity-framework asp.net-web-api

我一直在寻找关于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是否存在,但我仍然希望你们中任何一个人遇到同样的问题,并找到解决方法。

问候,马蒂亚斯。

0 个答案:

没有答案