C# UpdateException:由于使用实体框架和Oracle时对象的当前状态,操作无效
我试图为持久性添加一个新的实体对象,但是我得到一个who的内部异常,消息如下: 由于对象的当前状态,操作无效 正在创建的对象:C# UpdateException:由于使用实体框架和Oracle时对象的当前状态,操作无效,c#,oracle,entity-framework,exception,oracle11g,C#,Oracle,Entity Framework,Exception,Oracle11g,我试图为持久性添加一个新的实体对象,但是我得到一个who的内部异常,消息如下: 由于对象的当前状态,操作无效 正在创建的对象: var something = new SITE { EntityKey = new EntityKey("DataModelContainer.SITE", "SITE_ID", "ID"), SITE_COMMON_REFERENCE = "hello", SITE_ID = "
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
}
并被称为:
using (var repo = new BillRepository())
{
repo.ExportSiteData(something);
}
请验证相关表的主键(以xml格式调出.edmx文件)是否在这两个部分中都存储了GeneratedPattern=“Identity”。存在一个已知错误,即EF通过设计器修改一个部分,但不修改另一个部分。请在这两个部分中查找:
<EntityType Name="TIMELINE">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="decimal" Nullable="false" Precision="19" StoreGeneratedPattern="Identity" />
看
- 在过去几天里,我也遇到了同样的问题,这也与主键有关
在我的例子中,模型的源数据库没有设置主键(无论出于何种原因)
从这些表生成模型时,.ssdl如下所示:
<EntitySet Name="..." EntityType="Model.Store...." store:Type="Tables" store:Schema="..." store:Name="...">
<DefiningQuery>
SELECT
"..."."..." AS "...",
...
</DefiningQuery>
</EntitySet>
挑选
“…”作为“…”,
...
“存储:名称”和“定义查询”在表已具有主键时未生成
删除这两个部分后,我以前生成的.ssdl文件工作正常,即使表中仍然没有主键。我在升级旧项目时遇到了这个错误 确保项目与包文件中列出的.net framework版本匹配。例如,如果列出了net452,请确保您的项目设置为使用Net4.5.2。如果解决方案中有多个项目,请确保它们都设置为正确的.net framework版本
另外,我注意到在向项目中添加新的数据模型时,会混淆要添加哪个模型文件。我相信这是由于在我的开发盒上安装了TFS(我有express,然后安装了最新版本)。为了解决这个问题,我暂时断开了项目与TFS的连接。)您是否查看了您发布的链接上的异常,以及导致问题的原因。。您是否正在关闭调用的方法中您可能不知道的任何地方的连接?@DJKRAZE-是的,我都读过它们,但是似乎没有任何帮助,我不相信我正在关闭连接,因为我在调用之前刚刚创建了_上下文:
\u context=new DataModelContainer()你能粘贴那个代码吗。。也许在这之前、期间或之后,在新的范围内正在做一些事情。。我还注意到,对于ID字段,如何在DB中设置自动生成字段?@DJKRAZE-我在这行repo.ExportSiteData(某物)之后添加了与我的问题相关的额外代码;什么都不需要回购。。?如果是这样的话..它正在被处理..只是试着按照你的逻辑。。
<EntitySet Name="..." EntityType="Model.Store...." store:Type="Tables" store:Schema="..." store:Name="...">
<DefiningQuery>
SELECT
"..."."..." AS "...",
...
</DefiningQuery>
</EntitySet>