添加多对多关系

时间:2014-02-04 20:22:09

标签: c# linq entity-framework-5 repository

我正在使用Entity框架,我有用户,事件和表UsersEvents。 我知道这个问题我可能会在谷歌上找到,我已经尝试但不知怎的,仍然有问题。

所以我有:

User: UserId, Name

Event: EventId, Title

UserEvents: UserId, EventId

我想创建活动。

所以在我的存储库中我有一个方法:

public void CreateEvent(Event @event)
{
    //How to add event? (so the database will update the user that created the
    //event and also will update the UsersEvents table.
}

我试图先添加事件,但后来遇到问题才能获得用户。 有人可以帮助我,甚至没有代码,只是为了帮助我理解我该怎么做。我应该添加事件然后添加用户吗?或者我应该将事件和用户添加到UsersEvents?在此先感谢:)

1 个答案:

答案 0 :(得分:1)

pure 多对多关联(其中联结表在类模型中不可见)中,您必须将项添加到所有者的集合中。在你的情况下,这将是:

var evnt = new Event { ... };
var user = db.Users.Include(u => u.Events).Single(u => u.UserId == id);
user.Events.Add(evnt);
db.SaveChanges();

Include用于确保在向其添加项目之前加载user.Events。如果未加载,则更改跟踪器将不会注意到更改,也不会保存任何内容。

但我想我理解你的问题。您已经实现了存储库模式,因此您不得不通过自己的存储库处理每个对象。 User EventRepository与{{1}}无关,对吧?所以删除这个存储库层!在大多数情况下,它只是一个无用的层,只能沙袋你想要做的所有数据。要确信您可能需要阅读Generic Repository With EF 4.1 what is the point