我正在使用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)。 我建议我的模型中的关系有问题。也许有人可以帮助我。
答案 0 :(得分:0)
如果您为Person
模型提供了明确的CityId
属性,那么您无需从存储库中检索City
对象,只需指定CityId
即可。 }直接赋值给Person
对象并保存。对于非常简单的视图,您也不需要使用视图模型,您可以在Person
操作方法中收到POST
实例,并且已经分配CityId
,假设html字段在视图中具有相同的名称。
这应该可以解决您的问题,因为您会知道您正在使用已经存在的CityId。
无论如何,您的数据库已经包含Person.City_CityId
字段,因此您不会创建任何新内容,只需让自己更好地控制情况。有时您可能需要在模型中使用[ForeignKey]
属性将Person.CityId
属性与虚拟属性相关联,但使用标准命名约定时,这不是必需的。