使用带有本地数据库文件 (Sdf) 的实体框架生成 C# 整数主键

Posted

技术标签:

【中文标题】使用带有本地数据库文件 (Sdf) 的实体框架生成 C# 整数主键【英文标题】:C# integer primary key generation using Entity Framework with local database file (Sdf) 【发布时间】:2010-06-03 08:46:30 【问题描述】:

我正在编写一个独立的应用程序,我想使用实体框架来存储我的数据。

目前应用程序很小,所以我可以使用本地数据库文件开始。

问题是本地数据库文件没有像 SQL Server 那样自动生成整数主键的能力。

在创建表时将ID列定义为“identify”没有问题,但是在尝试调用SaveChanges方法时会抛出以下异常:

“SQL Server Compact 不支持服务器生成的键和服务器生成的值。”

对于未来将与 SQL Server 兼容的本地数据库文件中的实体的主键管理方法有何建议?

谢谢, 罗尼

【问题讨论】:

您在这里使用的是什么版本的 Visual Studio 和 SQL Server Compact Edition? VS 2008 .Net Framework 3.5。自卫队版本 3.5.5692.0 【参考方案1】:

对于数据库没有自动编号的情况,我可以想到三种通用技术。

1) 首先执行 MAX(ID_column)+1 以获得下一个 ID 值。但是,您需要注意这里的多用户问题。此外,这些数字不是一次性的。如果您删除一行并添加一个新行,您将获得相同的 ID。这对您来说可能是也可能不是问题。

2) 使用 GUID。几乎可以保证是唯一的,但 ID 列的占用空间很大。

3) 使用单独的键表来保存分配的最后一个 ID。这样可以确保数字永远不会被重复使用,但会在您的数据库中添加一个额外的表。

【讨论】:

以上是关于使用带有本地数据库文件 (Sdf) 的实体框架生成 C# 整数主键的主要内容,如果未能解决你的问题,请参考以下文章

带有 Sql 视图的实体框架在生成 .sql 文件中显示为表

SQL Compact Edition - 不允许访问数据库文件

VS 2010 - 带有 MySql 存储过程的实体框架似乎不起作用

Dal(带有实体框架)和模型层到 MVC

带有 XML 文件的实体框架 [关闭]

我应该如何设置我的集成测试以使用带有实体框架的测试数据库?