6

ODP.NET 11.2.0.3.0 で Entity Framework を使用しています。一部のテーブルでは永続性が機能していますが、これは単純な新しいオブジェクトの追加を完全に拒否しており、よくわかりません。よろしくお願いいたします。ありがとうございました

これがコードです。モデル ブラウザを使用してオブジェクトからイメージ フィールドを削除しましたが、SaveChanges() が呼び出されるとコードが失敗します。

var corpDirectoryEntities = new CorpDirectoryEntities();
var cc = new EmployeePhoto();
cc.UserId = 12345;   // NUMBER field
cc.ImageName = "imagename";   // VARCHAR2(100)
cc.Image = photoStream;   // LONG RAW
corpDirectoryEntities.EmployeePhotos.AddObject(cc);
corpDirectoryEntities.SaveChanges();

以下の例外が発生します。

System.Data.UpdateException がユーザー コードによって処理されませんでした
  Message=エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。
  ソース=System.Data.Entity
  スタックトレース:
       System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager、IEntityAdapter アダプター) で
       System.Data.EntityClient.EntityAdapter.Update (IEntityStateManager entityCache) で
       System.Data.Objects.ObjectContext.SaveChanges (SaveOptions オプション) で
       System.Data.Objects.ObjectContext.SaveChanges() で
       C:\Dev\Projects\Repositories\Services\CorpDirectory\CorpDirectoryRepository.cs:line 356 の Repositories.Services.CorpDirectory.CorpDirectoryRepository.SaveDirectoryAccountPhoto(Int32 accountId, Byte[] photoStream) で
       C:\Dev\Projects\Repositories.Tests\CorpDirectory\CorpDirectoryUserTestFixture.cs:line 192 の Tests.CorpDirectory.CorpDirectoryUserTestFixture.TestGetUserPhoto() で
  内部例外: System.Data.EntityCommandCompilationException
       Message=コマンド定義の準備中にエラーが発生しました。詳細については、内部例外を参照してください。
       ソース=System.Data.Entity
       スタックトレース:
            System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand (DbModificationCommandTree コマンド ツリー) で
            System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand (UpdateTranslator トランスレーター、Dictionary'2 identifierValues) で
            System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute (UpdateTranslator トランスレーター、EntityConnection 接続、Dictionary`2 identifierValues、List`1 generatedValues) で
            System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager、IEntityAdapter アダプター) で
       内部例外: System.InvalidOperationException
            Message=オブジェクトの現在の状態のため、操作は有効ではありません。
            ソース=Oracle.DataAccess
            スタックトレース:
                 Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.ExpressionTranslator.Visit (DbScanExpression 式) で
                 System.Data.Common.CommandTrees.DbScanExpression.Accept (DbExpressionVisitor ビジター) で
                 Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.GenerateInsertSql (DbInsertCommandTree ツリー、EFOracleProviderManifest providerManifest、EFOracleVersion sqlVersion、List'1& パラメーター) で
                 Oracle.DataAccess.Client.SqlGen.SqlGenerator.GenerateSql (DbCommandTree ツリー、EFOracleProviderManifest providerManifest、EFOracleVersion sqlVersion、List`1& パラメーター、CommandType& commandType) で
                 Oracle.DataAccess.Client.EFOracleProviderServices.CreateCommand (EFOracleProviderManifest providerManifest、DbCommandTree コマンド ツリー) で
                 Oracle.DataAccess.Client.EFOracleProviderServices.CreateDbCommandDefinition (DbProviderManifest providerManifest、DbCommandTree commandTree) で
                 System.Data.Common.DbProviderServices.CreateCommandDefinition (DbCommandTree コマンド ツリー) で
                 System.Data.Common.DbProviderServices.CreateCommand (DbCommandTree コマンド ツリー) で
                 System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand (DbModificationCommandTree コマンド ツリー) で
            内部例外:

4

3 に答える 3

16

ということで、何時間も眺めて、やっと手に入れました。.ssdl ファイルを確認しました。私のオブジェクト間の違いの 1 つは、 がどのよう<EntitySet ... >に定義されたかにありました。私はそれを変更しましたが、もちろん、現在は機能しています。EF デザイナーは本当にひどいです。

<EntitySet Name="EmployeePhoto" ... store:Name="TABLE_NAME">
    <DefiningQuery>
        SELECT ..... 
    </DefiningQuery>
</EntitySet>

を削除し、<DefiningQuery...>他のエンティティと一致するように次のものに置き換えました。

<EntitySet Name="EmployeePhoto" ... />
于 2012-07-12T14:16:53.903 に答える
2

Oracle テーブルに主キーがない場合、Entity Frameworks は、EF スキーマにインポートされるときに定義クエリを使用します。次に、テーブルではなくクエリであるため、何かを追加しようとすると無効な操作の例外が発生します。

于 2013-12-17T14:50:49.447 に答える