【问题标题】:Entity Framework with Instead Of triggers带有代替触发器的实体框架
【发布时间】:2012-08-31 14:14:06
【问题描述】:

我将 EF 与 SQL Server 数据库一起使用。我为该视图创建了一个视图和一个Instead Of 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 并且在 支持当前的元素 操作。

视图在映射中有一个标识列。

有什么建议吗?

【问题讨论】:

    标签: c# entity-framework triggers


    【解决方案1】:

    如果您使用 xml 编辑器打开 EDMX 文件,在定义 TargetView 的部分中,您将有一些类似于以下的 xml;

    <EntitySet Name=".."  
               EntityType=".." 
               store:Type="Views" 
               store:Schema=".." 
               store:Name="..">
    <DefiningQuery>SELECT ....</DefiningQuery>
    

    您需要更改此 xml 部分才能进行 CRUD 操作;

    <EntitySet Name=".."  
               EntityType=".."  
               store:Type="Tables" 
               Schema=".." />
    

    【讨论】:

    • @nonnb 描述替代方法的好文章;感谢分享。
    • 这行得通,但这是非常错误的。希望 EF 5.0 会在此处添加一些改进。
    • @Jaster 我同意你的看法;与 nhibernate 等其他 ORM 工具相比,EF 令人头疼。
    • nhibernate 也好不到哪里去。对于这个问题,它似乎做得更好。与 EF 相比,它有其他限制(自动生成/映射、性能等)。老实说,当涉及到严肃的数据库操作时,我不喜欢任何 OR 映射器。
    猜你喜欢
    • 2014-03-23
    • 2010-12-20
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2012-04-10
    • 2011-08-08
    相关资源
    最近更新 更多