为什么 EF 在原始模型没有定义新列的情况下插入新列?

问题描述 投票:0回答:1

我创建了一个简单的模型并且

公开课电影

{

public Int64 MovieSer { 获取;放; } //PK

公共字符串?电影 ID { 获取;放; }

公共字符串? MovieUID { 获取;放; }

公共字符串?标题{得到;放; }

公共列表类别{ get;放; }

}

公开课类别

{

public Int64 CategorySer { get; set; }  //PK

public Int64 MovieSer { get; set; }  //FK

public string CategoryId { get; set; }

public string StudyName { get; set; }

public DateTime CreationDate { get; set; }

public string StudyUID { get; set; }

   

}

电影数据库上下文

公共类 MovieDbContext :DbContext

{

公共 MovieDbContext(DbContextOptions 选项):基(选项)

{

    
}

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

}

Q1:运行 pm>add-migration 后,类别表包含一个新列 MovieId = table.Column(类型:“nvarchar(450)”,可空:true) 如果初始模型中不存在列名 MovieId ,为什么它要尝试创建列名 < Category> ? Q2:为什么为表 Category 分配了不正确的约束

约束:表=>

{

 table.PrimaryKey("PK_Movie", x => x.MovieId);

 table.ForeignKey(

     name: "FK_Category_Movie_MovieId",

     column: x => x.MovieId,

     principalTable: "Movie",

     principalColumn: "MovieId");

});

当然,当我运行应用程序时,它失败了

Microsoft.Data.SqlClient.SqlException(0x80131904):列名“MovieId”无效。

顺便说一句:如果我不包含类别表,那么一切正常,因此问题与表关系有关。

任何解释将不胜感激

entity-framework dataset dbset
1个回答
0
投票

看起来您的类别表正在尝试使用 MovieId 因为它是 PK。这应该是一个 CategoryId。 MovieId 将是返回到电影实体/表的 FK。

© www.soinside.com 2019 - 2024. All rights reserved.