2012-07-11 41 views
6

ODP.NET 11.2.0.3.0でEntity Frameworkを使用しています。いくつかのテーブルでは永続性が働いていますが、この1つのフラットアウトは単純な新しいオブジェクトを追加することを拒否しており、私はそれを理解できません。あなたの助けが大変ありがとうございます。ありがとうございますオブジェクトの現在の状態のため、操作が無効です

ここにコードです。 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 was unhandled by user code 
    Message=An error occurred while updating the entries. See the inner exception for details. 
    Source=System.Data.Entity 
    StackTrace: 
     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() 
     at Repositories.Services.CorpDirectory.CorpDirectoryRepository.SaveDirectoryAccountPhoto(Int32 accountId, Byte[] photoStream) in C:\Dev\Projects\Repositories\Services\CorpDirectory\CorpDirectoryRepository.cs:line 356 
     at Tests.CorpDirectory.CorpDirectoryUserTestFixture.TestGetUserPhoto() in C:\Dev\Projects\Repositories.Tests\CorpDirectory\CorpDirectoryUserTestFixture.cs:line 192 
    InnerException: System.Data.EntityCommandCompilationException 
     Message=An error occurred while preparing the command definition. See the inner exception for details. 
     Source=System.Data.Entity 
     StackTrace: 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
      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) 
     InnerException: System.InvalidOperationException 
      Message=Operation is not valid due to the current state of the object. 
      Source=Oracle.DataAccess 
      StackTrace: 
       at Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.ExpressionTranslator.Visit(DbScanExpression expression) 
       at System.Data.Common.CommandTrees.DbScanExpression.Accept(DbExpressionVisitor visitor) 
       at Oracle.DataAccess.Client.SqlGen.DmlSqlGenerator.GenerateInsertSql(DbInsertCommandTree tree, EFOracleProviderManifest providerManifest, EFOracleVersion sqlVersion, List`1& parameters) 
       at Oracle.DataAccess.Client.SqlGen.SqlGenerator.GenerateSql(DbCommandTree tree, EFOracleProviderManifest providerManifest, EFOracleVersion sqlVersion, List`1& parameters, CommandType& commandType) 
       at Oracle.DataAccess.Client.EFOracleProviderServices.CreateCommand(EFOracleProviderManifest providerManifest, DbCommandTree commandTree) 
       at Oracle.DataAccess.Client.EFOracleProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
       at System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
       at System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
      InnerException: 

答えて

16

だから、数時間それを見て、ついにそれを手に入れました。私は.ssdlファイルをチェックしました。私のオブジェクトの1つの違いは、<EntitySet ... >の定義方法でした。私はそれを変更しましたが、もちろん今は動作します。 EFデザイナーは単なる神話です。

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

私は<DefiningQuery...>を削除し、他のエンティティに一致するように、次でそれを置き換える:

<EntitySet Name="EmployeePhoto" ... /> 
+2

定義クエリを追加すると、不思議にOracleデータベースとのエンティティ操作が中断されます。 – BigMomma

+2

デザイナーがクエリとしていくつかのテーブルを生成している理由についてのアイデアはありますか? –

+0

マイクロソフトとオラクルが協力できないためです。 –

2

Oracleの表に主キーがありません場合は、エンティティフレームワークは、ときにそれが定義クエリを使用するようになりますEFスキーマにインポートされます。次に、それはクエリではなくテーブルなので、何かを追加しようとすると無効な操作例外が発生します。

0

古いプロジェクトをアップグレードしようとしているときにこのエラーが発生しました。

プロジェクトがパッケージファイルにリストされている.netフレームワークバージョンと一致していることを確認してください。例えば。 net452がリストされている場合は、プロジェクトがnet 4.5.2を使用するように設定されていることを確認してください。ソリューションに複数のプロジェクトがある場合は、それらがすべて正しい.netフレームワークバージョンに設定されていることを確認してください。

また、私はプロジェクトに新しいデータモデルを追加するとき、それは追加するモデルをファイルへと混乱するだろう気づきました。私はこれが私の開発ボックスにインストールされたTFSのためだと信じていました。この問題を解決するために、私は現在TFSからプロジェクトを切り離しました)。

関連する問題