【问题标题】:OnModelCreating not linking tables togetherOnModelCreating 不将表链接在一起
【发布时间】:2020-10-15 15:24:48
【问题描述】:

我想链接我的两个表。但是,它不起作用。我有两个模型“CartItem”和“Movie”,我希望 CartItem 包含一个电影。我在 Mac 上的 Studio Visual 中工作。太棒了。

namespace Eshop.Models
public class CartItem
{
    public int ID { get; set; }
    public int MovieID { get; set; }
    public Movie Movie { get; set; }
    public int Quantity { get; set; } }

public class EshopContext : DbContext
{
    public EshopContext(DbContextOptions<EshopContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CartItem>().HasOne<Movie>(s => s.Movie).
    }

    public DbSet<Movie> Movie { get; set; }

    public DbSet<Eshop.Models.CartItem> CartItem { get; set; }

    public DbSet<Eshop.Models.CheckOut> CheckOut { get; set; }

} 

}

【问题讨论】:

  • 究竟什么是“不工作”?

标签: sql asp.net entity-framework


【解决方案1】:

显然 CartItem 和 Movie 之间存在关系。唉,你忘了告诉我们什么样的关系:一对多?多对多?

无论如何,你应该声明你的电影是虚拟的。

在实体框架中,非虚拟属性代表表格的列;虚拟属性表示表之间的关系(一对多,多对多,...)

外键是表中的实际列:非虚拟。电影不是 CartItems 表中的列:虚拟

Movie 和 CartItems 之间的一对多关系:一部电影有零个或多个 CartItems,每个 CartItem 都只有一个 Movie

modelBuilder.Entity<CartItem>()
  .HasRequired(cartItem => cartItem.Movie)
  .WithMany()
  .HasForeignKey(cartItem => cartItem.MovieId);

换句话说:包含CartItems 的表中的每个CartItem 都与一个Movie 有关系。这种关系是通过属性Movie。每个Movie 可以有多个CartItems(零个或多个)。引用此 Movie 的外键位于属性 CartItem.MovieId)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多