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") を作成する必要があります。これは削除できません。

新しく作成する分には問題ないのですが、DBからデータを取得する際にEFがSectionのデフォルトインスタンスを作成し、DBからのデータも自分のエンティティに追加するので間違っています。

何か案は?ありがとう

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 に答える