开发者

How to add or remove a many-to-many relationship in Entity Framework?

There's a many-to-many UserFeed table that stands between User and Feed and denotes a t开发者_JAVA百科witter-like follow relationship.

It only has two fields, which form a composite key: UserID and FeedID.

I need to write a method that will subscribe or unsubscribe a user from a feed based on a boolean flag.

public void SetSubscriptionFlag (int userId, int storeId, bool subscribe)
{
}

I'm new to Entity Framework so I'm trying to find and follow an "EF-ish" way to accomplish this.

My initial thoughts are:

  • Instead of working with the middle UserFeed class, I should create a many-to-many Subscriptions property (EDIT: hit limitations here);
  • After I've done so, I'll need to fetch a User instance by ID, check whether it has given Feed in its Subscriptions and add/delete it depending on the flag and current existence;
  • Figure out how to avoid racing conflicts when there is a time interval before the check and adding/deleting and user manages to submit two adding or deletion requests;
  • Optimize my code as to avoid unneccessary SELECTs, if any occur, because all I really want to do is a single SELECT and single INSERT/DELETE.

A relevant code snippet and comment on my points is highly appreciated.

Thanks!


You can use dummy objects - it definitely works for insert and I hope it can be used for delete as well:

Create new relation:

var user = new User() { Id = userId };
context.Users.Attach(user);
var store = new Store() { Id = storeId };
context.Stores.Attach(store);

// Now context trackes both entities as "existing"
// and you can build a new relation
user.Subscriptions.Add(store);
context.SaveChanges();

Remove existing relation:

var user = new User() { Id = userId };
var store = new Store() { Id = storeId };
user.Subscriptions.Add(store);
context.Users.Attach(user);

// Now context trackes both entities as "existing"
// with "existing" relation so you can try to remove it
user.Subscriptions.Remove(store);
context.SaveChanges();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜