Я использую 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' ".Итак - что не так с этой картинкой?
Что я делаю не так и как мне это исправить ???