实体框架试图删除现有列

时间:2014-10-23 15:57:05

标签: c# entity-framework

我对某些Entity Framework行为感到有些迷惑。我有一个这样的课:

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

AccountID字段应来自我们使用的API。不幸的是,我当时并不知道Entity Framework不支持非db生成的主键。所以我必须将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");

为什么Entity Framework会尝试删除这个不相关的列(ClientID)?为什么尝试在AlterColumn语句中使用不再存在的列(ID已重命名为ClientID)?

1 个答案:

答案 0 :(得分:0)

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

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

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

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