2009-11-11 80 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();