2009-11-11 62 views
1

我的数据库表如下: 用户(用户ID,姓名) 朋友(UserIdFrom,UserIdTo)与LINQ协会和实体同桌C#和ADO .NET实体数据模型

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

我的.NET实体数据模型有一个名为Users的实体和一个名为Friends的对应于Friends表的实体的关联。我的问题是我想获得一个LINQ语句来选择所有的关联对象(注意:A可以是B的朋友,但B不是A的朋友)。

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

这样,我就能够做到这一点:在context.Friends

VAR friendsSetResults =从朋友那里friends.UserIDFrom ==用户ID || friends.UserIDTo == userID 选择好友;

但正如我所说,它不会允许我为这张表创建一个关联加一个实体。

如果我直接使用SQL,它将是一个简单的声明,但我坚持使用LINQ。 我有什么选择?

我的目标是删除从和到的每个条目。

回答

1

如果你想删除一组数据,你最好直接向数据库发送删除查询,这样你就可以做一个单一的delete from friends where userIdFrom = @userId || userIdTo = @userId

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

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

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();