3

每当我尝试在 mySchema 中创建一个新的 myObj 时,它一直告诉我 ID 为空,但是当我运行调试器时,调试器告诉我我正在添加的对象没有 NULL 值。它适用于我同事的机器,但不适用于我的机器......

MyObj myObj = new myObj() {
    ID = 1234,
}
container.AddObject("MyObj", myObj);
container.ObjectStateManager.ChangeObjectState(myObj, System.Data.EntityState.Added);
// container extends ObjectContext as created by the EDMX

这是我得到的错误:

---------------------------

---------------------------
System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> Oracle.DataAccess.Client.OracleException: ORA-01400: cannot insert NULL into ("myModel"."myObj"."ID")
ORA-06512: at line 4

   at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)

   at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)

   at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)

   at Oracle.DataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)

   at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)

   at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)

   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

   --- End of inner exception stack trace ---

   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

   at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)

   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)

   at System.Data.Objects.ObjectContext.SaveChanges()
---------------------------
OK   
---------------------------
4

4 回答 4

7

您需要在实体框架模型中指定数据库不会为您生成密钥,并且 EF 应该使用您提供的密钥!

modelBuilder.Entity<Department>().Property(t => t.DepartmentID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

查看来源:http: //msdn.microsoft.com/en-us/data/jj591617.aspx#1.3

希望这可以帮助其他找到此线程的人!

于 2013-09-05T11:39:36.013 回答
3

当我最终查看 EDMX 文件时,我注意到 StoreGeneratedPattern 设置为 Identity,这阻止了在通过 Entity-Framework 将 ID 保存到数据库时从子类继承继承。

于 2013-02-25T20:47:03.130 回答
1

我遇到了实体框架没有在 edmx 中设置 storeGeneratedPattern="Identity" 的问题。如果您使用记事本打开 edmx 并找到您的实体,请将其添加到其 key 属性中,看看是否有效。

于 2013-02-25T21:01:57.503 回答
0

虽然不了解oracle,但对Entity框架有一定的经验,

我假设,MyObj是数据库中的一个表,

然后,

container.MyObj.AddObject(myObj);
container.SaveChanges();

检查天气,这给出了同样的例外。

于 2013-02-25T16:45:55.387 回答