2

Code Firstwithを使用するEF 5.0と、次のものがあります。

internal class Entities : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Project> Projects { get; set; }
}

// User class which holds a list of 'Project' class
public class User
{
    private List<Project> _projects = new List<Project>();

    public int Id { get; set; }
    internal List<Project> Projects
    {
        get { return _projects; }
        set { _projects = value; }
    }
}

// Project class which holds a list of 'Milestone' class
public class Project
{
    private List<Milestone> _milestones = new List<Milestone>();

    public int Id { get; set; }
    public string Title { get; set; }
    internal List<Milestone> MileStones
    {
        get { return _milestones; }
        set { _milestones = value; }
    }
}

EF はテーブルとリレーションを正しく作成しましたが (ユーザー => プロジェクト => マイルストーンに対して 1 対多)、いくつかのプロジェクトでユーザーを作成してに追加するとDbContext、ユーザーのみが追加され、彼のプロジェクトは追加されません。 . マイルストーンを持つプロジェクトを持つユーザーの場合も同じです。私はこのようにしています:

public void AddUser(User user)
{
    using (var repository = new Entities())
    {
        repository.Users.Add(user);
        repository.SaveChanges();
    }
}

私の質問は、EF複雑なエンティティを自動的に INSERT または UPDATE する (カスケード) ことを強制する方法です。そのため、プロジェクトのリストを持つユーザーを追加し、ユーザーを USERS テーブルに挿入し、彼のプロジェクトを PROJECTS テーブルに自動的に (正しい関係で) INSERT しますか?

それは5番目のバージョンでスマートですかEF、それとも手動で行う必要がありますか?

4

3 に答える 3

3
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>().HasMany(x => x.Projects);
}
于 2013-05-16T18:15:49.347 に答える
2

「List Projects」および「List MileStones」プロパティの「protected internal」を設定することによっても、目的の結果を得ることができます。このようにして、EFはそれらを処理できます。EF はプロキシ クラス ラッパーを使用してこれらのプロパティをオーバーライドし、遅延読み込み機能も備えています。

于 2014-07-01T13:15:25.880 に答える