UpdateException:由于使用Entity Framework和Oracle时对象的当前状态,操作无效

时间:2012-01-04 15:24:29

标签: c# oracle entity-framework exception oracle11g

我正在尝试为持久性添加新的Entity对象,但是我得到一个UpdateException,其内部异常是InvalidOperationException,其中包含以下消息:

  

由于对象的当前状态,操作无效。

正在创建的对象:

var something = new SITE
{
    EntityKey = new EntityKey("DataModelContainer.SITE", "SITE_ID", "ID"),
                    SITE_COMMON_REFERENCE = "hello",
                    SITE_ID = "hello"     
};

然后传递给:

public void ExportSiteData (SITE exportSiteData)
{
    _context.SITE.AddObject(exportSiteData);
    _context.SaveChanges(); //<-- Exception here
}

数据库是Oracle 11g,我可以通过Entity Framework成功提取数据。

我猜这个问题更多的是数据库方面,但是我可以使用“hello”值成功填充它,没有键/参照完整性问题。

我非常感谢被指向正确的方向。感谢

更多代码:

ExportSiteData在BillRepository范围内,实现IDisposable

class BillRepository : IDisposable
{
    private readonly DataModelContainer _context;        

    public BillRepository()
    {
        _context = new DataModelContainer();
    }

    public void ExportSiteData (SITE exportSiteData)
    {
        _context.SITE.AddObject(exportSiteData);
        _context.SaveChanges(); //<-- Exception here
    }

    public void Dispose()
    {
        if (_context != null) 
        { 
            _context.Dispose(); 
        } 
    }
}

并且这样称呼:

using (var repo = new BillRepository())
{
    repo.ExportSiteData(something);
}

3 个答案:

答案 0 :(得分:2)

验证相关表的主键(在xml中拉出.edmx文件)在两个部分中都有StoreGeneratedPattern =“Identity”。有一个已知错误,其中EF通过设计器修改一个部分,但不修改其他部分。请在以下两个部分中查找:

<EntityType Name="TIMELINE">
          <Key>
            <PropertyRef Name="ID"/>
          </Key>

  <Property Name="ID" Type="decimal" Nullable="false" Precision="19" StoreGeneratedPattern="Identity" />

答案 1 :(得分:0)

在过去的几天里我遇到了同样的问题,它也与主键有关。

就我而言,模型的源数据库没有设置主键(无论出于何种原因)。

从这些表生成模型时,.ssdl看起来像这样:

<EntitySet Name="..." EntityType="Model.Store...." store:Type="Tables"     store:Schema="..." store:Name="...">
 <DefiningQuery>
 SELECT
 "..."."..." AS "...",
 ...
 </DefiningQuery>
</EntitySet>
当表已有主键时,

“存储:名称”并且未生成“DefiningQuery”

删除这两部分之后,我以前生成的.ssdl文件都能正常工作,即使表中仍然没有主键。

答案 2 :(得分:0)

尝试升级旧项目时,我遇到了这个错误。

确保您的项目与包文件中列出的.net框架版本相匹配。例如。如果您列出了net452,请确保您的项目设置为使用net 4.5.2。如果解决方案中有多个项目,请确保它们都设置为正确的.net框架版本。

另外,我注意到在向项目添加新数据模型时,会对要添加的模型文件感到困惑。我相信这是因为我的开发盒上安装了TFS(我有快递,然后安装最新)。为了解决这个问题,我现在将项目与TFS断开连接。