EF 5 Beta 2 Code-First を使用しています。BrandとVehicleという名前の 2 つのエンティティを持つ edmx ファイルを作成しました。
1 つのブランドは 0 個以上 (多数) のビークルを持つことができ、すべてのビークルにはブランド(必須) が必要です。 Vehicleには、 null 不可のBrandIDという名前の外部キーがあります。
(relationship)
Brand +-------------------> Vehicle
(1) (*)
また、EF 5 DbContext Generatorを使用して POCO クラスを作成しました。
問題
レコードの読み取りまたは書き込みを試みると、次のエラーが発生します。
エラー 3023: 行 155:Column Vehicle.BrandID から始まるフラグメントのマッピングで問題が発生しました テーブル Vehicle 内にマッピングする必要があります: デフォルト値がなく、null 可能ではありません。
注意: Vehicle が2 つのクラス ( Car & Motorbike ) の派生元である抽象基本クラスであるTPC継承マッピングを使用しています。
クラス定義と関連する流暢な API コードを次に示します。
//------------ Class definiions ---------------
public abstract partial class Vehicle
{
public int VehicleID { get; set; }
public short BrandID { get; set; }
public virtual Brand Brand { get; set;
}
public partial class Car : Vehicle
{
public string BodyType { get; set; }
}
public partial class Motorbike : Vehicle
{
}
public partial class Brand
{
public Brand()
{
this.Vehicles = new HashSet<Vehicle>();
}
public short BrandID { get; set; }
public string Name { get; set; }
public virtual ICollection<Vehicle> Vehicles { get; set; }
}
//--------------- Fluent API code ---------------
modelBuilder.Entity<Vehicle>()
.Property(p => p.VehicleID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Car>()
.Map(m =>
{
m.ToTable("Car");
m.MapInheritedProperties();
});
modelBuilder.Entity<Motorbike>()
.Map(m =>
{
m.ToTable("Motorbike");
m.MapInheritedProperties();
});
modelBuilder.Entity<Brand>()
.HasMany(b=>b.Vehicles)
.WithRequired(v=>v.Brand)
.HasForeignKey(p => p.BrandID);
modelBuilder.Entity<Brand>()
.Property(p => p.BrandID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
すべてが問題ないように見え、何度もチェックされているため、これは非常に奇妙です。
どんな考えでも大歓迎です。