【发布时间】:2012-02-02 11:55:31
【问题描述】:
我正在尝试为持久性添加一个新的实体对象,但是我得到了一个 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 在实现IDisposable 的BillRepository 内:
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);
}
【问题讨论】:
-
您是否查看了您发布的链接上的异常,就可能导致问题的原因而言。您是否正在关闭您正在调用的方法中您可能不知道的任何地方的连接的..?
-
@DJKRAZE - 是的,我都阅读了它们,但似乎没有任何帮助我的东西,我不相信我正在关闭连接,因为我在之前刚刚创建了 _context来电:
_context = new DataModelContainer(); -
你能粘贴那个代码吗..也许在新的之前或之后有一些事情正在做..我还注意到 ID 字段是如何在你的数据库中设置的是自动生成字段..?
-
@DJKRAZE - 我添加了似乎与我的问题相关的额外代码
-
所以在这一行之后 repo.ExportSiteData(something);任何东西都不需要回购..?如果是这样..它正在被处理..只是试图遵循你的逻辑..
标签: c# oracle entity-framework exception oracle11g