实体框架正在尝试删除现有列

本文关键字:删除 框架 实体 | 更新日期: 2023-09-27 18:27:32

我对实体框架的一些行为感到有点困惑。我有一门课是这样的:

 Account
 -ID (PK, int, not null)
 -AccountID (PK, int, not null)
 -ClientID
 -... other scalars

AccountID字段应该来自我们使用的API。不幸的是,我当时并不知道实体框架不支持非数据库生成的主键。因此,我必须将AccountID作为主键的一部分删除。

当我从AccountID字段中删除[Key]属性时,我会从迁移中得到一些奇怪的行为。以下是迁移中对我来说毫无意义的行。

DropColumn("dbo.Account", "ClientID");
RenameColumn(table: "dbo.Account", name: "ID", newName: "ClientID");
.... more stuff
AlterColumn("dbo.Account", "ID", c => c.Int(nullable: false, identity: true));
AddPrimaryKey("dbo.Account", "ID");

为什么实体框架会尝试删除此不相关的列(ClientID)?为什么它试图在AlterColumn语句中使用一个已不存在的列(ID已重命名为ClientID)?

实体框架正在尝试删除现有列

您可以使用非db生成的主键。

如果你先做代码,你可以使用属性:

[DatabaseGenerated(DatabaseGenerationOption.None)]
public int (or string or w/e) Id { get; set; }

您是尝试先使用代码还是先使用数据库,还是尝试如何创建模型?如果你需要,我可以编辑我的答案,增加更多细节。