MVC代码首先一对多关系创建新数据

时间:2013-01-03 12:05:32

标签: asp.net-mvc code-first

我正在使用CodeFirst和MVC 3并拥有这两个类:

public class Person
{
    public int PersonId { get; set; }

    [Email]
    [Required]
    public string Email { get; set; }

    public string Passwort { get; set; }

    public virtual City City { get; set; }
}

public class City
{
    public int CityId { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual IEnumerable<Person> Persons { get; set; }       
}

添加新人时,我想向这个人介绍一个城市。因此,我在我的视图中使用了一个包含所有城市的SelectList。 CityId和对象被正确传输到Post方法,但是当将更改保存到数据库时,我将在city-table中有一个新对象(具有相同的名称,但是新的Id)。 我建议我的模型中的关系有问题。也许有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

如果您为Person模型提供了明确的CityId属性,那么您无需从存储库中检索City对象,只需指定CityId即可。 }直接赋值给Person对象并保存。对于非常简单的视图,您也不需要使用视图模型,您可以在Person操作方法中收到POST实例,并且已经分配CityId,假设html字段在视图中具有相同的名称。

这应该可以解决您的问题,因为您会知道您正在使用已经存在的CityId。

无论如何,您的数据库已经包含Person.City_CityId字段,因此您不会创建任何新内容,只需让自己更好地控制情况。有时您可能需要在模型中使用[ForeignKey]属性将Person.CityId属性与虚拟属性相关联,但使用标准命名约定时,这不是必需的。