0

我有一个这样的实体:

public class Part : Entity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public IEnumerable<VersionSection> VersionSections
    {
        get
        {
            return Sections.Where(s => s is VersionSection).Cast<VersionSection>();
        }
    }

    public virtual ICollection<Section> Sections { get; set; }      

    public Part()
    {
        this.Sections = new List<Section>();            
    }
}

当我为该业务创建一个新的 Part 实例时,我想为 Sections 集合设置默认值:

  • 创建零件时,应创建默认截面(名称 = “截面 1”)。这不能被删除。

创建一个新的没有问题,但是当从数据库中获取数据时,EF会创建一个默认的Section实例并将数据库中的数据添加到我的实体中,所以这是错误的。

有任何想法吗?谢谢

4

1 回答 1

1

在创建实体时,没有万无一失的方法可以实现您所需要的。但是,您可以在实体保存之前执行此操作。

public class MyContextTest : DbContext
{
    public override int SaveChanges()
    {
        var parts = ChangeTracker.Entries<Part>()
            .Where(e => e.State == System.Data.EntityState.Added)
            .Select(e => e.Entity);

        foreach (var item in parts)
        {
             if (item.Sections == null)
                item.Sections = new List<Section>();

             item.Sections.Add(new Section { Name = "Section 1" });
        }

        return base.SaveChanges();
    }
}
于 2012-04-13T07:57:23.553 回答