我在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实体缓存)
在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()
InnerException:System.Data.EntityCommandCompilationException
Message =准备命令定义时发生错误。有关详细信息,请参见内部异常。
源= System.Data.Entity
堆栈跟踪:
在System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator,Dictionary`2 identifierValues)
在System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator转换器,EntityConnection连接,词典2标识符值,列表1生成值)
在System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager,IEntityAdapter适配器)
InnerException:System.InvalidOperationException
由于对象的当前状态,Message = Operation无效。
源= 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&parameters,CommandType&commandType)中
在Oracle.DataAccess.Client.EFOracleProviderServices.CreateCommand(EFOracleProviderManifest providerManifest,DbCommandTree commandTree)
在Oracle.DataAccess.Client.EFOracleProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest,DbCommandTree commandTree)中
在System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)处
在System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
在System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
InnerException:
最佳答案
所以,看了几个小时,我终于明白了。我检查了.ssdl文件。我的对象之间的区别是<EntitySet ... >
的定义方式。我对其进行了更改,并且现在可以正常使用了。 EF设计师真是令人敬畏。
<EntitySet Name="EmployeePhoto" ... store:Name="TABLE_NAME">
<DefiningQuery>
SELECT .....
</DefiningQuery>
</EntitySet>
我删除了
<DefiningQuery...>
并将其替换为以下内容以匹配其他实体:<EntitySet Name="EmployeePhoto" ... />
关于entity-framework - 由于对象的当前状态,操作无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438391/