我正在使用 EF 5 Beta 2 Code-First。我创建了一个 edmx 文件,其中有 2 个实体,其中包括Brand和Vehicle。
一个品牌可以有零个或多个(许多)车辆,每辆车都应该有一个品牌(必需)。 Vehicle有一个名为BrandID的外键,它是不可为空的。
(relationship)
Brand +-------------------> Vehicle
(1) (*)
我也确实使用EF 5 DbContext Generator来创建 POCO 类。
问题
当我尝试读取或写入记录时,我收到以下错误:
错误 3023:从第 155 行开始映射片段时出现问题:必须映射表 Vehicle 中的列 Vehicle.BrandID:它没有默认值且不可为空。
注意:我正在使用TPC继承映射,其中 Vehicle 是一个抽象基类,从中派生了 2 个类(Car和Motorbike)。
这是类定义加上相关的流畅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);
这很奇怪,因为一切似乎都很好,并且已经检查了好几次。
任何想法将不胜感激。