web-dev-qa-db-ja.com

EFで1対多の関係を構成する方法

私は次のモデルを持っています

public class PageConfig : Base
{
    // Properties Etc..

    public ICollection<Image> ScrollerImages { get; set; }
}

私のアプローチは、ジャンクションテーブル{PageConfigID、ImageID}を使用してバインドすることです。

私のモデルバインダーでは、次のことを試しました。

modelBuilder.Entity<PageConfig>()
    .HasMany(x => x.ScrollerImages)
    .WithMany()
    .Map(x =>
    {
        x.ToTable("junc_PageConfigScrollerImages");
        x.MapLeftKey("PageConfigID");
        x.MapRightKey("ImageID");
    });

これにより、画像のコレクションがnullになります。

これらの画像をPageConfigモデルにバインドするにはどうすればよいですか?

編集

問題のほとんどはユーザーエラーが原因でした。 jicこれはあなたに起こります。

データベースのキー制約が正しく設定されていることを確認してください。
モデルである必要があるICollectionの仮想化。

12
opdb

これらの2つのエンティティ間に1対多の関係を作成する場合、モデルは次のようになります。

public class PageConfig
{
    public int Id {get;set;}

    //navigation property
    public ICollection<Image> ScrollerImages {get;set;}
}

public class Image 
{
    public int Id {get;set;}

    //FK
    public int? PageConfigId {get;set;}

    //navigation property
    public PageConfig PageConfig {get;set;}
}

Fluent Apiの構成は次のようになります。

modelBuilder.Entity<Image>()
            .HasOptional(i=>i.PageConfig)
            .WithMany(pc=>pc.ScrollerImages)
            .HasForeignKey(i=> i.PageConfigId);

単方向の1対多の関係を作成する場合は、ImageエンティティのFKとナビゲーションプロパティを削除し、次のように関係を構成します。

modelBuilder.Entity<PageConfig>()
            .HasMany(pc => pc.ScrollerImages)
            .WithOptional();

この種類の関係の詳細については、これをチェックしてください link

6
octavioccl

単位 http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

「... Fluent APIを使用して、以下に示すようにStudentエンティティクラスを使用して1対多の関係を設定できます。」

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            //one-to-many 
            modelBuilder.Entity<Student>()
                        .HasRequired<Standard>(s => s.Standard)
                        .WithMany(s => s.Students)
                        .HasForeignKey(s => s.StdId);

    }

「... HasRequiredメソッドの代わりにHasOptionalメソッドを使用して、外部キー列をヌル可能にします。」

だからあなたはこのようなものを探しているでしょう:

modelBuilder.Entity<Image>()
            .HasOptional<PageConfig>(x => x.PageConfig)
            .WithMany(x => x.ScrollerImages)
            .HasForeignKey(x => x.PageConfigId)
1
colinsmith1