我正在编写一个独立的应用程序,我想使用Entity Framework来存储我的数据。
目前应用程序很小,所以我可以使用本地数据库文件开始。
问题是本地数据库文件无法像SQL Server那样自动生成整数主键。
在创建表时将ID列定义为“识别”并不是问题,但在尝试调用SaveChanges方法时会引发以下异常:
{“SQL Server Compact不支持服务器生成的密钥和服务器生成的值。”}
如何管理将来与SQL Server兼容的本地数据库文件中的实体的主键?
谢谢, 罗尼
答案 0 :(得分:2)
我可以想到三种通用技术,数据库没有自动编号。
1)首先执行MAX(ID_column)+1以获取下一个ID值。但是,您需要了解此处的多用户问题。此外,这些数字不仅仅是一次性使用。如果删除行并添加新行,您将获得相同的ID。这对您来说可能是也可能不是问题。
2)使用GUID。几乎可以保证它是唯一的,但ID列的占用空间很大。
3)使用一个单独的密钥表来保存分配的最后一个ID。这样可以确保数字永远不会被重用,但会在数据库中添加一个额外的表。