2012-04-13 93 views
0

我有这样的一个实体默认值:EF 4.3代码第一 - 如何设置

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>();    
    } 
} 

我想,当我创建一个新的实例来设置的默认值Sections集合非常时期部分关注此业务:

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

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

任何想法?谢谢

回答

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(); 
    } 
}