如何在实体框架中使用String属性作为主键

ck8*_*4vi 20 c# sql database entity-framework entity-framework-6

我是EF的新手,尝试在ETF6.0中通过代码优先方法完成我的第一步,现在我遇到了问题.

我有一个房产

[Key]
public string FooId { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我模型的主要关键.

但如果我跑了

PM>更新 - 数据库

包管理器控制台中的命令更新到数据库的挂起迁移我收到以下错误:

标识列'FooId'必须是数据类型int,bigint,smallint,tinyint或十进制或数字,标度为0,并且约束为不可空.

如果我将模型中的PK更改为

[Key]
public int FooId { get; set; } 
Run Code Online (Sandbox Code Playgroud)

一切正常.

但我需要PK为类型字符串,因为它在我的情况下绝对敏感.我知道有缺点,但对我来说这是必要的.

我在这里看到一篇较旧的帖子如何将字符串作为实体框架中的主键!.

但它似乎没有解决我的问题或我只是不理解它.

我真的不能在SQL数据库中使用字符串作为PK吗?

或者有办法做到这一点?

Nik*_*ava 42

这是在没有启用Identity Autoincrement的情况下创建PK的正确方法:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string FooId { get; set; }
Run Code Online (Sandbox Code Playgroud)