[英]EF Code First Many-to-Many not working
使用 Entity Framework Code First 范例,我將以下對象和關系定義為 ASP.Net MVC3 應用程序的一部分。 問題是 Photo 和 Gallery 對象之間的多對多關系無法正常工作。
目前,一個畫廊可以包含許多照片 - 這是正確的。 但是一張照片只能與一個畫廊相關聯——這是不正確的。 我希望一張照片能夠出現在許多畫廊中。 如果我在已與另一個畫廊關聯的情況下將照片添加到畫廊,則會將其從另一個畫廊中刪除。
我非常感謝您就如何使這種多對多關系發揮作用的解決方案。
這是我的代碼:
public class Photo
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<Gallery> Galleries { get; set; }
}
public class Gallery
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
/* I would expect the following to cause a lookup table to
* be created but it isnt */
modelBuilder.Entity<Photo>().HasMany<Gallery>(p => p.Galleries);
modelBuilder.Entity<Gallery>().HasMany<Photo>(g => g.Photos);
}
我在我自己的自定義數據庫初始化程序中使用以下代碼。
public void InitializeDatabase(PhotoDBContext context)
{
var dbCreationScript = ((IObjectContextAdapter)context).ObjectContext.CreateDatabaseScript();
Log(dbCreationScript);
context.Database.ExecuteSqlCommand(dbCreationScript);
}
通過記錄 dbCreationScript 變量,我可以看到為這些表生成的相關 sql 如下。
create table [dbo].[Galleries] (
[ID] [int] not null identity,
[Title] [nvarchar](max) null,
[Photo_ID] [int] null,
primary key ([ID])
);
create table [dbo].[Photos] (
[ID] [int] not null identity,
[Title] [nvarchar](max) null,
[Gallery_ID] [int] null,
primary key ([ID])
);
alter table [dbo].[Photos] add constraint [Gallery_Photos] foreign key ([Gallery_ID]) references [dbo].[Galleries]([ID]);
alter table [dbo].[Galleries] add constraint [Photo_Galleries] foreign key ([Photo_ID]) references [dbo].[Photos]([ID]);
如您所見,沒有生成 SQL 來創建查找表,這可能是關系不起作用的原因 - 為什么不創建查找表?
我相信你需要使用這樣的東西:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Photo>()
.HasMany<Gallery>(x => x.Galleries)
.WithMany(x => x.Photos)
.Map(x =>
{
x.MapLeftKey("ID");
x.MapRightKey("ID");
x.ToTable("GalleryPhotos");
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.