Ser*_*hov 35 entity-framework compact-framework
我刚刚开始使用实体框架,所以我决定将它连接到我现有的SQL Server CE数据库.我有一个IDENTITY(1,1)主键的表,但当我尝试添加实体时,我遇到了上述错误.
从MS Technet artice 我学到了
与实体框架一起使用时,SQL Server Compact不支持具有服务器生成的密钥或值的实体.使用实体框架时,实体的密钥可能会标记为服务器生成.这使数据库能够在插入或实体创建时为密钥生成值.另外,实体的零个或多个属性可以标记为服务器生成的值.有关更多信息,请参阅Entity Framework文档中的Store Generated Pattern主题.虽然实体框架允许您使用服务器生成的键或值定义实体类型,但SQL Server Compact在与实体框架一起使用时不支持具有服务器生成的密钥或值的实体.对具有服务器生成的值的实体的数据操作操作会引发"不支持"异常.
所以现在我有几个问题:
小智 17
使用uniqueidentifier或手动生成bigint/int键值是最佳选择.
这样的事也许......
private static object lockObject = new object();
private static long nextID = -1;
public static long GetNextID()
{
lock (lockObject)
{
if (nextID == -1) nextID = DateTime.UtcNow.Ticks; else nextID++;
return nextID;
}
}
Run Code Online (Sandbox Code Playgroud)
这假设您在应用程序运行期间每个tick不会生成多个记录(加上停止和重新启动的时间).我认为这是一个合理的假设,但如果你想要一个完全防弹(但更复杂)的解决方案,那么从数据库中读取最高的ID并从中递增.
小智 6
SQL CE 4.0版通过其Entity Framework提供程序修复了此问题.
| 归档时间: |
|
| 查看次数: |
19168 次 |
| 最近记录: |