3

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   
---------------------------
4

4 に答える 4

3

最終的に EDMX ファイルを調べたところ、StoreGeneratedPattern が Identity に設定されていることに気付きました。これにより、Entity-Framework を介してデータベースに保存されるときに、ID が子クラスから継承されて渡されなくなりました。

于 2013-02-25T20:47:03.130 に答える
1

edmx で storeGeneratedPattern="Identity" を設定しないエンティティ フレームワークに問題がありました。メモ帳で edmx を開き、エンティティを見つけたら、これをそのキー プロパティに追加し、それが機能するかどうかを確認します。

于 2013-02-25T21:01:57.503 に答える
0

私はオラクルは詳しくありませんが、Entityフレームワークはある程度経験があり、

MyObjデータベース内のテーブルであり、

それで、

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

これが同じ例外を与えている天気を確認してください。

于 2013-02-25T16:45:55.387 に答える