我目前正在使用实体框架代码,并使用以下模型(请参阅下文)。 1类别可以包含许多书籍,同样1个出租也可以有很多书籍。
public class Book {
public Guid Id {get; set;}
public string Title {get; set;}
public virtual BookCategory Category {get; set;}
}
public class BookCategory {
public Guid Id {get; set;}
public string Name {get; set;}
public virtual ICollection<Book> Books {get; set;}
}
public class Rental {
public Guid Id {get; set;}
public DateTime DateRented {get; set;}
public virtual ICollection<Book> Books {get; set;}
}
当我生成数据库时,我得到的是包含BookCategory_Id和Rental_Id的book表。
| Id | Title | BookCategory_Id | Rental_Id |
然而,这在我的上下文中不起作用,因为多个租赁可以包含相同的书。有没有办法可以指定关系,因此实体框架将生成一个包含以下内容的新表:
| Rental_Id | Book_Id |
| aaa | book1 |
| aaa | book2 |
| bbb | book1 |
任何帮助?
答案 0 :(得分:1)
是的,您可以这样做,在Rental
和Book
实体之间创建多对多关系。在Book
实体中添加Rentals
集合导航属性:
public class Book {
public Guid Id {get; set;}
public string Title {get; set;}
public virtual BookCategory Category {get; set;}
public virtual ICollection<Rental> Rentals {get; set;}
}
然后,在您的上下文的OnModelCreating
方法中添加此配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>()
.HasMany<Rental>(b => b.Rentals)
.WithMany(r => r.Books)
.Map(cs =>
{
cs.MapLeftKey("Book_Id");
cs.MapRightKey("Rental_Id");
cs.ToTable("Rental_Books");
});
}
有关此类关系的详情,请查看此link
答案 1 :(得分:1)
您必须指定一本书可能有很多租借:
public class Book {
public Guid Id {get; set;}
public string Title {get; set;}
public virtual BookCategory Category {get; set;}
public virtual ICollection<Rental> Rentals {get; set;}
}
然后,魔法是无效的,你必须建立关系:
modelBuilder.Entity<Book>().HasMany(x => x.Rentals).WithMany(y => y.Books)