Der Vorgang ist fehlgeschlagen, weil ein index oder eine Statistik mit dem Namen 'IX_ID' existiert bereits auf dem Tisch 'TestAs'?
Ich bin mit EF4.3.1 ersten code, habe ich den code wie unten
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);
}
}
}
Wenn ich Debuggen des Projekts, die exception geworfen wird, "Der Vorgang ist fehlgeschlagen, weil ein index oder eine Statistik mit dem Namen 'IX_ID' existiert bereits auf dem Tisch 'TestAs'."
Aber, wenn ich entfernen 'TestC' aus dem code, nur 'TestA' und 'TestB', ändern Sie den code wie unten
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);
}
}
}
alles gut funktioniert. Weiß jemand, warum die exception geworfen wurde?
- Ich dachte, wir hätten Angriff genommen dies? Hast du wieder
HasOptional(...).WithRequired()
zweimal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit den shared primary key mapping mit einer abhängigen Entität und 2 Prinzip Entitäten. Nach Ihren maaping Primärschlüssel
TestA
ist ein FK zuTestB
sowieTestC
. Das ist, warum EF beschwert sich, wenn er versucht zu schaffen, 2 FKs mit dem gleichen Namen.IMO ist dies nicht eine praktische situation. Erläutern Sie, welche Beziehungen zwischen den Entitäten, so dass die situation, die modelliert werden kann mehr realistisch.