Я использую Code First CTP 5. У меня довольно простая настройка между родительской и дочерней таблицами.
Create table testA (
id int not null identity(1,1),
stuff varchar(200),
primary key (id)
);
go
create table testB (
id int not null
foreign key references testA(id),
morestuff varchar(200),
primary key (id)
);
go
Чтобы обратиться к этой таблице с помощью Code First, у нас есть следующая конструкция:
namespace Test.Models
{
public class TestEntities : DbContext
{
public DbSet<testa> testa { get; set; }
public DbSet<testb> testb { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<testa>().ToTable("testa");
modelBuilder.Entity<testa>()
.Property(p => p.id)
.HasDatabaseGenerationOption(DatabaseGenerationOption.Identity);
modelBuilder.Entity<testb>().ToTable("testb");
}
}
public class testa
{
public int id { get; set; }
public String stuff { get; set; }
public virtual testb testb { get; set; }
}
public class testb
{
public int id { get; set; }
public string morestuff { get; set; }
public virtual testa testa { get; set; }
}
}
Когда я пытаюсь добавить запись в testa, я получаю сообщение об ошибке «Невозможно вставить явное значение для столбца идентификаторов в таблице« testA », когда для параметра IDENTITY_INSERT установлено значение OFF».
В порядке. Страйк 1 в Code First за то, что он не распознал, что Id является столбцом идентификаторов. Мы можем это исправить, поэтому сообщаем CodeFirst, что testa.id — это идентификатор:
modelBuilder.Entity<testa>()
.Property(p => p.id)
.HasDatabaseGenerationOption(DatabaseGenerationOption.Identity);
После этого мы запускаем его снова и получаем еще одну ошибку: «Зависимое свойство в ReferentialConstraint сопоставлено со столбцом, сгенерированным хранилищем. Столбец: 'id'». Итак - что не так с этой картинкой?
Что я делаю не так и как это исправить???