entity-framework - 由于对象的当前状态,操作无效

标签 entity-framework entity-framework-4 odp.net

我在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/

相关文章:

asp.net - 使用 .NET 4.5 的 ASP.Net 成员资格和 Entity Framework 迁移问题

sql-server - 从 Entity Framework 中的存储过程获取结果反馈

c# - 数据库中的某些数据更改。我怎样才能触发一些 C# 代码对这些更改做一些工作?

c# - LINQ 到实体 : Loading One-To-Many Navigation Properties in Strong Typed Projections

entity-framework - 使用 Entity Framework Extended 的 Entity Framework 6 批量更新和 AuditLog

entity-framework-4 - Entity Framework 4.1 Code-First 方法实现域服务上的多对多关系

asp.net - ODP.net 连接池 : ClientID, 客户端标识符从第一个登录的用户开始不会改变

oracle - 流利的NHibernate-配置Oracle数据提供程序ODP

c# - Entity Framework 代码优先 : cycles or multiple cascade paths

c# - 不支持 MySql EF 6 存储过程导入函数 EDM 类型