私は次のモデルを持っています
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の仮想化。
これらの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
「... 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)