1

目标

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

问题

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

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"

    [...]
}

如您所见,我没有设置用户的Email,PHash或者PSalt— 我没有注册新用户,而是将现有(用户)关联到(新)市场。

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

技术细节

我正在使用实体框架 5 + C# + MySQL。

4

2 回答 2

2

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

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

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

我希望这有帮助!

于 2013-09-05T13:33:04.557 回答
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方法的更多信息,请查看 MSDN 上的此处

祝大家成功!

于 2013-09-05T14:42:44.320 回答