【问题标题】:Entity Framework 4 many to many doesn't delete the actual entityEntity Framework 4 many to many 不会删除实际的实体
【发布时间】:2010-06-24 15:52:04
【问题描述】:

我有一个基于 SQL Server 2008 数据库的 EF4 模型。在我的模型中,我有一个多对多的关系:

文章 * - * 评论

项目 * - * 评论

在我的模型中,我只是创建了一个关联并将其设置为多对多。在我的数据库中,我得到了另外两个表 ArticleComments 和 ProjectComments,它们只保存每个表的主键。

问题是,当我从代码中的文章中删除评论时(使用 article.Comments.Remove([some comment entity]),它只会从 ArticleComments 中删除该行,而不是它本身的实际评论。

有什么解决办法吗?

我曾考虑将其设置为 ProjectComments 表中的触发器 ondelete,但我觉得这应该只使用 Entity Framework 4 的东西。

【问题讨论】:

  • 你能给我们一些代码吗?你如何加载实体?你如何删除它们?
  • 你真的有shared cmets吗?我本来期望Articles 1 - * Comments 关系。
  • 它们不会被共享,但我希望用户能够轻松地看到他写入任何实体的 cmets。因此,我没有为项目创建单独的评论表,而是将所有 cmets 放在一个表中,并使用多对多 :)

标签: c# sql-server entity-framework-4


【解决方案1】:

您所做的只是删除了文章和评论之间的关联(不会从 Comments 表中删除数据,而是从 ArticleComments 中删除数据)。

要删除评论,您必须在上下文实例上调用 DeleteObject 方法。这也将删除评论和文章之间的关联(如果我是对的话,也会删除评论和项目之间的关联)。

您还可以在调用 SaveChanges 之后放置一个断点,并查看使用 IntelliTrace 对 SQL Server 执行的查询(或使用 SQL 配置文件作为最后的手段)。

问候...

【讨论】:

  • 啊,这确实如我所愿。现在唯一的“问题”是我必须获取所有关联 cmets 的列表,并通过调用 DeleteObject 枚举它们。工作得很好,当然,但我真的很想看到一种更优雅的方式来删除多对多的关系实体......
  • 不幸的是,我不知道使用 EF 的另一种方法(也不知道使用 EntitySQL)。
【解决方案2】:

尝试将删除操作设置为级联。它在关联属性中。

【讨论】:

  • 这是说我不能:不能指定操作,因为它的多重性是''。不能在具有多重性“”的末端指定操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2012-11-04
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多