0

MVC 3 で CodeFirst を使用しており、次の 2 つのクラスがあります。

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 は新しくなります)。私のモデルの関係に何か問題があることを示唆しています。多分誰かが私を助けることができます。

4

1 に答える 1

0

Personモデルに明示的なプロパティを与える場合、リポジトリからオブジェクトCityIdを取得する必要はありません。値をオブジェクトに直接City割り当てて保存するだけです。非常に単純なビューの場合、ビューモデルも使用する必要はありません。ビューの html フィールドが同じ名前であると仮定すると、アクション メソッドにインスタンスを受け取ることができ、既に割り当てられています。CityIdPersonPersonPOSTCityId

これにより、既に存在する CityId を明示的に使用していることがわかるため、問題は解決するはずです。

Person.City_CityIdとにかく、データベースにはすでにフィールドが含まれているため、新しいものを作成するのではなく、状況をより細かく制御できます。[ForeignKey]プロパティを仮想プロパティに接続するために、モデル内の属性を使用する必要がある場合がありますがPerson.CityId、標準の命名規則を使用すると、これは必要ありません。

于 2013-01-03T12:34:53.347 に答える