2013-06-24 44 views
0

我正在创建一个新的EntityObject,它不存在于数据库(SQLite)中。我填充对象的属性并将其连接到父对象。我没有填充主键属性,因为据我所知EF会自动为我生成一个临时EntityKey。 然后我使用AddObject方法将新创建的EntityObject添加到上下文中,之后我调用SaveChanges。Temporary EntityKey not generated

我收到UpdateException:由于违反约束而中止 PRIMARY KEY必须是唯一的。 我看到主键属性始终设置为0,尽管它应该是数据库中的下一个可用值,对吧? 我检查了在数据库中的主键字段是自动增量。

我该怎么做才能让EF给我一个临时的EntityKey?

回答

0

EF不会为您创建临时密钥。你需要自己生成临时密钥。

你可以做什么:在你的模型中添加一个属性,用[NotMapped]属性装饰。在创建对象时,这个值应该用一个值初始化。 Guids很好地解决了这个问题。您只需使用Guid.NewGuid()为您生成一个临时密钥。

[NotMapped]确保您的字段不会在数据库中持久化。

+0

问题出在数据库本身。它没有自动增加数据库表中的主键,现在情况已经解决。 – Nuts