Entity Framework 5 を使用して、多対多の関係を持つ単純な挿入を試みています。
次のように2つのPOCOクラスがあります。
public class Category
{
public virtual string Title { get; set; }
public virtual DateTime EntryDate { get; set; }
public virtual DateTime LastUpdated { get; set; }
public virtual ICollection<Article> Articles { get; set; }
}
public class Article
{
public virtual string Title { get; set; }
public virtual string Content { get; set; }
public virtual DateTime EntryDate { get; set; }
public virtual DateTime LastUpdated { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
そして、次の流暢な API マッピング コード...
public class CategoryMap : EntityTypeConfiguration<Category>
{
public CategoryMap()
{
this.ToTable("Categories");
this.HasKey(x => x.ID);
this.Property(x => x.Title).IsRequired().HasMaxLength(255);
}
}
public class ArticleMap : EntityTypeConfiguration<Article>
{
public ArticleMap()
{
this.ToTable("Articles");
this.HasKey(x => x.ID);
this.HasMany(x => x.Categories)
.WithMany(x => x.Articles)
.Map(x =>
{
x.ToTable("MapArticleCats");
x.MapLeftKey("CategoryID");
x.MapRightKey("ArticleID");
});
this.Property(x => x.Title).IsRequired().HasMaxLength(255);
this.Property(x => x.Content).IsRequired().HasMaxLength(4000);
}
}
次に、エンティティ フレームワークは、Category テーブルと Article テーブルの両方を生成し、その詳細が ArticleMap コード (MapArticleCats) で指定された 3 番目のマッピング テーブルと共に生成します。SQL Server では次のようになります。
記事 ID - int
カテゴリ ID -int
次のコード (数行の追加または取得) は、コントローラーの記事にカテゴリを追加します。
IEnumerable<Category> GetCats = CategoryRepository.GetAll();
//DO SOME CODE TO FIGURE WHICH CATEGORIES I NEED.
IEnumerable<Category> Categories = InferCategoriesFromPostedData(Model.Categories, GetCats);
foreach (Category c in Categories)
{
Article.Categories.Add(c);
}
これにより、挿入時に奇妙な動作が発生するようです。新しいカテゴリをカテゴリ テーブルに挿入し (DUPLICATE)、新しく作成された CategoryID (元の ID の代わりに) と正しい ArticleID を MapArticleCats テーブルに挿入します。
誰かが私が間違っているところを見ることができますか?