EF 4.3代码优先 - 如何设置默认值

时间:2012-04-13 04:01:14

标签: entity-framework-4 default-value

我有一个这样的实体:

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集合设置默认值:

  • 创建零件时,应创建默认的Section(Name =“Section 1”)。这不能删除。

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

有什么想法吗?感谢

1 个答案:

答案 0 :(得分: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();
    }
}