ManyToMany插入问题

时间:2013-09-05 13:01:18

标签: c# entity-framework many-to-many

目标

创建新市场并成功添加其经理。

问题

  

实体验证失败 - 错误如下:

     

MyApp.Models.Data.Users验证失败

     
      
  • 电子邮件:电子邮件字段是必填字段。

  •   
  • PHash:需要PHash字段。

  •   
  • PSalt:PSalt字段是必需的。

  •   

场景

我正在为我的应用程序创建一个市场,我可以设置它为经理。换句话说,我正在向一个已经存在的用户附加市场。我试图通过以下代码执行此操作:

[HttpPost]
public ActionResult Add(Market market)
{
    [...]

    Market marketBasics = new Market
    {
        Name = market.Name,
        Slug = market.Slug,
        Manager = market.ManagerId
    };

    [...]

    User user = new User
    {
        Id = market.ManagerId
    };

    db.Markets.Add(marketBasics); // Here I insert all the information
                                  // into "markets" table.

    marketBasics.User.Add(user);  // Here I (attempts to) insert into 
                                  // "users_in_markets"

    [...]
}

正如您所看到的,我没有设置用户的EmailPHashPSalt - 我没有注册新用户,但我正在关联现有用户(用户)到(新)市场。

所以我问:我该如何解决这个问题?

技术细节

我正在使用Entity Framework 5 + C#+ MySQL。

2 个答案:

答案 0 :(得分:2)

由于您在将市场添加到数据库后将用户添加到市场,因此未添加用户。因此,用户不在数据库中的市场中。

    marketBasics.User.Add(user);  //First add user to market

    db.Markets.Add(marketBasics); //Then add market to database

我希望有所帮助!

答案 1 :(得分:0)

通过Davud的答案和一些研究,我发现我需要将用户的ID附加到User实体。

关注最终代码:

[HttpPost]
public ActionResult Add(Market market)
{
    [...]

    Market marketBasics = new Market
    {
        Name = market.Name,
        Slug = market.Slug,
        Manager = market.ManagerId
    };

    [...]

    User user = new User
    {
        Id = market.ManagerId
    };

    db.User.Attach(user);
    marketBasics.User.Add(user);
    db.Markets.Add(marketBasics);

    [...]
}

要详细了解Attach方法,take a look here, on MSDN

大家的成功!