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

Entity framework 4 EF 4.3代码优先-如何设置默认值,entity-framework-4,default-value,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 Ver

我有一个这样的实体:

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>();            
    }
}
公共类部分:实体
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共IEnumerable版本节
{
得到
{
返回节。其中(s=>s是VersionSection.Cast();
}
}
公共虚拟ICollection节{get;set;}
公共部分()
{
this.Sections=新列表();
}
}
当我创建此业务的Part following的新实例时,我想设置Sections集合的默认值:

  • 创建零件时,应创建默认截面(Name=“Section 1”)。这不能删除
创建一个新的并没有问题,但是当从DB获取数据时,EF会创建一个默认的Section实例,并将DB中的数据添加到我的实体中,所以这是错误的


有什么想法吗?谢谢

在创建实体时,没有什么简单易行的方法可以实现您所需要的。但是,可以在保存实体之前执行此操作

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();
    }
}
公共类MyContextTest:DbContext
{
公共覆盖int SaveChanges()
{
var parts=ChangeTracker.Entries()
.Where(e=>e.State==System.Data.EntityState.Added)
.选择(e=>e.Entity);
foreach(部分var项目)
{
如果(item.Sections==null)
item.Sections=新列表();
添加(新节{Name=“第1节”});
}
返回base.SaveChanges();
}
}