我有一个这样的实体:
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集合设置默认值:
创建一个新的没有问题,但是当从DB获取数据时,EF会创建一个Section的默认实例,并将数据从DB添加到我的实体,所以这是错误的。
有什么想法吗?感谢
答案 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();
}
}