Сначала я использую код EF4.3.1, у меня есть код, приведенный ниже,
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (var context = new myContext())
{
TestA ta = new TestA();
ta.Name = "Hero";
TestB tb = new TestB();
tb.Name = "Allen";
TestC tc = new TestC();
tc.Name = "Iverson";
ta.tb = tb;
ta.tc = tc;
context.testASet.Add(ta);
}
}
}
class TestA
{
public int ID { get; set; }
public string Name { get; set; }
public TestB tb { get; set; }
public TestC tc { get; set; }
}
class TestB
{
public int ID { get; set; }
public string Name { get; set; }
public TestA ta { get; set; }
}
class TestC
{
public int ID { get; set; }
public string Name { get; set; }
public TestA ta { get; set; }
}
class myContext : DbContext
{
public DbSet<TestA> testASet { get; set; }
public DbSet<TestB> testBSet { get; set; }
public DbSet<TestC> testCSet { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestB>().HasOptional(x => x.ta).WithRequired();
modelBuilder.Entity<TestC>().HasOptional(x => x.ta).WithRequired();
modelBuilder.Entity<TestA>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<TestB>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<TestC>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
}
Когда я отлаживаю проект, возникает исключение: «Операция не выполнена, так как индекс или статистика симя «IX_ID» уже существует в таблице «TestAs». "Но если я удалю «TestC» из кода, только «TestA» и «TestB», измените код, как показано ниже:
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (var context = new myContext())
{
TestA ta = new TestA();
ta.Name = "Hero";
TestB tb = new TestB();
tb.Name = "Allen";
ta.tb = tb;
context.testASet.Add(ta);
}
}
}
class TestA
{
public int ID { get; set; }
public string Name { get; set; }
public TestB tb { get; set; }
}
class TestB
{
public int ID { get; set; }
public string Name { get; set; }
public TestA ta { get; set; }
}
class myContext : DbContext
{
public DbSet<TestA> testASet { get; set; }
public DbSet<TestB> testBSet { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TestB>().HasOptional(x => x.ta).WithRequired();
modelBuilder.Entity<TestA>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<TestB>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
}
все работает хорошо.Кто-нибудь знает, почему было брошено исключение?