具有 LINQ 关联的 C# 和 ADO .NET 实体数据模型以及同一表的实体

Posted

技术标签:

【中文标题】具有 LINQ 关联的 C# 和 ADO .NET 实体数据模型以及同一表的实体【英文标题】:C# and ADO .NET entity data models with LINQ associations and entities for the same table 【发布时间】:2009-11-11 15:20:28 【问题描述】:

我的数据库表如下: 用户(用户 ID、名称) 好友(UserIdFrom、UserIdTo)

我还有一个描述这些表的 ADO .NET 实体数据模型。

我的 .NET 实体数据模型有一个名为 Users 的实体和一个与 Friends 表相对应的名为 Friends 的实体的关联。

我的问题是我想要一个 LINQ 语句来选择所有关联对象(注意:A 可以是 B 的朋友,但 B 不是 A 的朋友)。

在 .NET 实体数据模型中,我尝试为 Friends 添加一个新实体,但它说我不能为同一个表使用与 User 表上的关联相同的名称。

这样我就可以做到:

var friendsSetResults = 来自 context.Friends 中的朋友 其中friends.UserIDFrom == userID || Friends.UserIDTo == 用户 ID 选择朋友;

但正如我所说,它不允许我同时为该表创建关联和实体。

如果我直接使用 SQL,这将是一个简单的语句,但我坚持使用 LINQ。 我有哪些选择?

我的目标是删除 from 和 to 的每个条目。

【问题讨论】:

【参考方案1】:

如果要删除一组数据,最好直接发送删除查询到db,这样就可以做一个delete from friends where userIdFrom = @userId || userIdTo = @userId

我不知道在实体框架中,但是在 linq2sql 上,您可以在上下文的部分类中添加一个方法并让它调用一个查询 - 例如 context.deleteFriends(userId)。实体框架中一定有类似的东西。

如果你想通过实体框架来做,你可以:

var user = context.Users.First(u=>u.userID == userId);
var toFriends = user.ToFriends.ToList();
var fromFriends = user.FromFriends.ToList();
foreach(var u in ToFriends) 
   user.ToFriends.Remove(u); //pseucode --- use whatever syntax that allows you to remove in entity framework

foreach(var u in FromFriends) 
   user.FromFriends.Remove(u); //pseucode --- use whatever syntax that allows you to remove in entity framework

context.SubmitChanges();

【讨论】:

以上是关于具有 LINQ 关联的 C# 和 ADO .NET 实体数据模型以及同一表的实体的主要内容,如果未能解决你的问题,请参考以下文章

LINQ TO SQL 和 ADO.NET ENTITY 有啥区别呢?

由于C#中ADO.NET对Oracle的命名空间引用时提示过时,为此想用Linq对数据库的连接等操作(见补充)

Linq和ADO.net的区别

C#中的LINQ

开始写博客,学习Linq

如何使用 ADO.net 在视图中包含相关对象