具有 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 有啥区别呢?