C# 具有Instead Of触发器的实体框架
我正在将EF与SQL Server数据库一起使用。我为该视图创建了一个视图和一个C# 具有Instead Of触发器的实体框架,c#,entity-framework,triggers,C#,Entity Framework,Triggers,我正在将EF与SQL Server数据库一起使用。我为该视图创建了一个视图和一个而不是Insert触发器,如下所示: insert into Target (value, someFk) select value, 4 from inserted select id from Target where @@ROWCOUNT > 0 and id = scope_identity() 我将视图映射到EF edmx。当我尝试添加实体时,调用SaveChanges(),会出现以下异常: 无
而不是Insert
触发器,如下所示:
insert into Target (value, someFk)
select value, 4 from inserted
select id from Target where @@ROWCOUNT > 0 and id = scope_identity()
我将视图映射到EF edmx。当我尝试添加实体时,调用SaveChanges()
,会出现以下异常:
无法更新EntitySet“TargetView”,因为它有一个DefiningQuery,并且该查询中不存在任何元素
元素来支持当前的
手术
视图在映射中有一个标识列
有什么建议吗?如果您使用xml编辑器打开EDMX文件,在定义TargetView的部分,您将有一些类似于以下内容的xml
<EntitySet Name=".."
EntityType=".."
store:Type="Views"
store:Schema=".."
store:Name="..">
<DefiningQuery>SELECT ....</DefiningQuery>
选择。。。。
为了进行CRUD操作,您需要更改这个xml部分
<EntitySet Name=".."
EntityType=".."
store:Type="Tables"
Schema=".." />
+1另请参见@nonnb这篇介绍替代方法的伟大文章;谢谢分享。这很有效,但这是非常错误的。希望EF5.0能在这里增加一些改进。@Jaster我同意你的观点;与nhibernate等其他ORM工具相比,EF是一个令人头痛的问题。nhibernate并没有任何改进。在这个问题上,它似乎做得更好。与EF相比,它还有其他限制(自动生成/映射、性能等)。老实说,当涉及到严重的数据库操作时,我不喜欢任何一个或映射器。