【发布时间】:2011-12-19 03:11:08
【问题描述】:
我正在使用 EF4 Code-First 进行建模的 ASP.NET MVC 项目。我有以下模型类:
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; }
}
还有以下 DbContext:
public class ComicContext : DbContext
{
public DbSet<ComicBook> ComicBooks { get; set; }
public DbSet<ComicBookPerson> ComicBookPerson { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Writers)
.WithMany(w => w.WorkedOnComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("WriterID")
.ToTable("ComicBook_Writers"));
modelBuilder.Entity<ComicBook>()
.HasMany(b => b.Pencillers)
.WithMany(p => p.WorkedOnComicBooks)
.Map(t => t.MapLeftKey("ComicBookID")
.MapRightKey("PencillerID")
.ToTable("ComicBook_Penciller"));
}
}
需要应用的规则是:
- 用户的收藏中可以有许多漫画书
- 漫画书可以在许多用户的收藏中
- 每本 ComicBook 可以有 1 个或多个作者
- 每本 ComicBook 可以有 1 个或多个 Pencillers
- ComicBookPerson 可以是任何书籍的作家或铅笔手
- ComicBookPerson 可以在许多书籍上工作,作为作家、铅笔手,或两者兼而有之
用户和漫画书之间的多对多模式创建得很好。打破的是 ComicBooks 和 ComicBookPersons 之间的多对多。我得到的错误信息是:
Schema specified is not valid. Errors:
(15,6) : error 0040: Type ComicBook_Writers is not defined in namespace Comics.Models (Alias=Self).
我基本上想要两个连接表,一个叫做 ComicBook_Writers,一个叫做 ComicBookPencillers。两个表都将包含一个 ComicBookID 和一个 ComicBookPersonID。这在 EF Code First 中可行吗?
【问题讨论】:
标签: asp.net-mvc-3 entity-framework-4 ef-code-first