我正在尝试为持久性添加新的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);
}
答案 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断开连接。