当列不为空时,get "无法在("schema"表"column")中

本文关键字:quot schema column get | 更新日期: 2023-09-27 18:01:15

每当我尝试在mySchema中创建一个新的myObj时,它一直告诉我ID是null,但是当我运行调试器时,调试器告诉我我添加的对象没有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   
---------------------------

当列不为空时,get "无法在("schema"表"column")中

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

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

见来源:http://msdn.microsoft.com/en-us/data/jj591617.aspx

1.3

希望这有助于其他人找到这个线程!

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

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

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

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

,

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

检查这是否给出相同的异常