Я использую EF 5 Beta 2 Code-First.Я создал файл edmx, в котором есть 2 сущности, среди которых Марка и Автомобиль .
Один Марка может иметь ноль или более (многие) Транспортное средство и каждое Транспортное средство должно иметь Марку (обязательно). Автомобиль имеет внешний ключ с именем BrandID , который не обнуляется .
(relationship)
Brand +-------------------> Vehicle
(1) (*)
Также я использовал EF 5 DbContextГенератор для создания классов POCO.
Проблема
Когда я пытаюсь либо читать, либо писать записи, я получаю следующую ошибку:
ошибка 3023: Проблема при отображении фрагментов, начиная со строки 155: Столбец 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);
Это так странно, поскольку все кажется нормальным и проверено несколько раз.
Любые мысли будут высоко оценены.