私は最初にエンティティ フレームワーク 4、mvc4、およびコードを使用しています。
オプションの 1:1 マッピングを作成するのに苦労しています。ここでは、オプションの 1:1 マッピングを持つメイン エンティティに FK が含まれていません。
public class User
{
[Column("user_id")]
public int Id {get;set;}
public virtual House House {get;set;} // optional mapping
}
public class House
{
[Column("house_id")]
public int Id {get;set;}
[Column("user_id")]
public int UserId {get;set;}
}
user テーブルに houseId 列がないことに注意してください。
これを正しくマッピングするにはどうすればよいですか?
注: 以下の方法は、House モデルのナビゲーション プロパティを User にも追加する必要があるため、私が本当にやりたいことではありません。
この方法を試してみましたが、やりたくないハウス モデルに仮想プロパティを追加する必要がありました: How do I code a optional one-to-one relationship in EF 4.1 code first with lazy loading and the same primary両方のテーブルのキー?
したがって、私の構成は上記の試行で次のようになります。
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
this.ToTable("User", SchemaName);
this.HasKey(x => x.Id);
this.HasOptional(x => x.House);
}
}
public class HouseConfiguration : EntityTypeConfiguration<House>
{
public HouseConfiguration()
{
this.ToTable("House", SchemaName);
this.HasKey(x => x.Id);
this.HasRequired(vc => vc.User).WithRequiredDependent(v => v.House);
}
}
しかし、これを行うと、モデルを保存すると、次のエラーが発生します。
Cannot insert explicit value for identity column in table 'House' when IDENTITY_INSERT is set to OFF
注: 上記の設定 (マッピングと構成) がなくても、House エンティティはデータベースに問題なく保存され、ID は正しく設定されます。