Asp.net mvc 3 首先在EF4代码中创建多对多关系
我正在ASP.NETMVC中进行一个项目,首先使用EF4代码进行建模。我有以下模型类:Asp.net mvc 3 首先在EF4代码中创建多对多关系,asp.net-mvc-3,entity-framework-4,ef-code-first,Asp.net Mvc 3,Entity Framework 4,Ef Code First,我正在ASP.NETMVC中进行一个项目,首先使用EF4代码进行建模。我有以下模型类: public class ComicBook { public long ComicBookID { get; set; } public string IssueTitle { get; set; } public int IssueNumber { get; set; } public DateTime PublishDate { get; set; } publ
public class ComicBook
{
public long ComicBookID { get; set; }
public string IssueTitle { get; set; }
public int IssueNumber { get; set; }
public DateTime PublishDate { get; set; }
public IList<ComicBookPerson> Writers { get; set; }
public IList<ComicBookPerson> Pencillers { get; set; }
public IList<User> CollectingUsers { get; set; }
}
public class ComicBookPerson
{
public long ComicBookPersonID { get; set; }
public string Name { get; set; }
public IList<ComicBook> WorkedOnComicBooks { get; set; }
}
public class User
{
[Key]
public long UserID { get; set; }
public string Email { get; set; }
public IList<ComicBook> CollectedBooks { get; set; }
}
我基本上需要两个连接表,一个叫做ComicBook_Writers,另一个叫做ComicBookPenciller。两个表都将包含一个ComicBookKid和一个ComicBookPersonID。这在EF Code First中可能吗?在
ComicBookPerson
类中需要两个与书写者和铅笔匠相关的集合属性
public class ComicBookPerson
{
public long ComicBookPersonID { get; set; }
public string Name { get; set; }
public IList<ComicBook> WroteComicBooks { get; set; }
public IList<ComicBook> PenciledComicBooks { get; set; }
}
公共类ComicBookPerson
{
公共长ComicBookPersonID{get;set;}
公共字符串名称{get;set;}
公共IList WroteComicBooks{get;set;}
公共IList铅笔簿{get;set;}
}
模型映射为
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Writers)
.WithMany(w => w.WroteComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("WriterID")
.ToTable("ComicBook_Writers"));
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Pencillers)
.WithMany(p => p.PenciledComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("PencillerID")
.ToTable("ComicBook_Penciller"));
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(b=>b.Writers)
.有许多(w=>w.WroteComicBooks)
.Map(t=>t.MapLeftKey(“ComicBookID”)
.MapRightKey(“WriterID”)
.ToTable(“漫画书作者”);
modelBuilder.Entity()
.HasMany(b=>b.Pencillers)
.有许多(p=>p.铅笔本)
.Map(t=>t.MapLeftKey(“ComicBookID”)
.MapRightKey(“PencillerID”)
.ToTable(“ComicBook_Penciller”);
}
我认为这个模型很接近正确,但仍然缺少一些东西。ComicBookPerson
既可以是作家也可以是铅笔匠,这意味着您仍然需要在您的类中列出第三个列表ComicBookPerson
:
public IList<ComicBook> WroteComicBooks { get; set; }
public IList<ComicBook> PenciledComicBooks { get; set; }
public IList<ComicBook> WrotPencComicBooks { get; set; }
public IList WroteComicBooks{get;set;}
公共IList铅笔簿{get;set;}
公共IList WrotPencComicBooks{get;set;}
我是对的吗?我认为这个模型很接近正确,但仍然缺少一些东西,关于COMICBOOKPERSON,它也可以是(作家和铅笔匠),这意味着你仍然需要在你的类COMICBOOKPERSON中列出第三个列表:public-IList-WroteComicBooks{get;set;}public-IList-PenciledComicBooks{get;set;}公共IList wrotpenncomicBooks{get;set;}我说得对吗?请不要用大写字母锁写所有东西。我不需要使用第三个集合。如果一个
ComicBookPerson
既是一本ComicBook
上的作家又是一名铅笔匠,那么该ComicBook
将简单地包含在WroteComicBooks
和PencilledComicBooks
两本收藏中。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Writers)
.WithMany(w => w.WroteComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("WriterID")
.ToTable("ComicBook_Writers"));
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Pencillers)
.WithMany(p => p.PenciledComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("PencillerID")
.ToTable("ComicBook_Penciller"));
}
public IList<ComicBook> WroteComicBooks { get; set; }
public IList<ComicBook> PenciledComicBooks { get; set; }
public IList<ComicBook> WrotPencComicBooks { get; set; }