如何使用实体框架在具有多对多关系的表中添加实体?

时间:2014-08-01 16:17:46

标签: c# asp.net entity-framework asp.net-web-api

我在asp.net web API中遇到了逻辑问题。我有添加用户的注册方法,每个用户都属于一个帐户,用户和帐户之间的关系是多对多的;一个帐户可以添加许多用户"和"用户可以存在于多个帐户中#34;所以我有3张桌子。因此,当我直到实体框架添加用户时,它只需在表格用户中添加信息,我还需要在第3个表格中添加帐户ID(结果多对多)。

UserDetail是数据库中的一个视图,包含帐户ID和用户i,如果不存在用户,则检查用户是否存在,但遗憾的是没有帐户ID。

UserDetail newUser = db.UserDetails.Where(newuser => newuser.UserMail == user.UserMail && newuser.AccId == accID).SingleOrDefault();
if (newUser == null)
{
    /*string passPhrase = System.Configuration.ConfigurationSettings.AppSettings["PassPhrase"];
    string random_token = Crypto.RandomToken().ToString();
    string EnToken = Crypto.Encrypt(random_token, passPhrase);
    user.ConfirmToken = random_token;*/

    db.Users.Add(user);
    try
    {
        db.SaveChanges();
        //Mail.SendMail(EnToken,user.UserMail);
        return Request.CreateResponse(HttpStatusCode.Accepted);
    }
    catch
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将帐户添加到帐户的用户或用户。

以下是向用户添加帐户的示例:

var newUser = db.UserDetails.FirstOrDefault(newuser => newuser.UserMail == user.UserMail && newuser.AccId == accID);
if (newUser == null)
{    
    var user = new User();
    var account = db.Accounts.FirstOrDefault(acc => acc === "some account");
    if(account != null)
    {
        //Depending on your entity, you may need to check if Accounts is null here.
        user.Accounts.add(account);
    }
    db.Users.Add(user);

    try
    {
        db.SaveChanges();
        return Request.CreateResponse(HttpStatusCode.Accepted);
    }
    catch
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
}

如果您的课程类似于以下内容,那么EF会自动为您映射表格。

public class User
{
    public ICollection<Account> Accounts {get;set;}
}

public class Account
{
    public ICollection<User> Users {get;set;}
}