Ich habe zwei Tabelle wie folgt:Warum Code zuerst Indexspalte erstellen?
[Table("MyFlashCard")]
public partial class MyFlashCard
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public MyFlashCard()
{
MyFlashCardPics = new HashSet<MyFlashCardPic>();
}
public int Id { get; set; }
public int? FaslID { get; set; }
public virtual FasleManJdl FasleManJdl { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<MyFlashCardPic> MyFlashCardPics { get; set; }
}
[Table("MyFlashCardPic")]
public partial class MyFlashCardPic
{
public int Id { get; set; }
[ForeignKey("MyFlashCard")]
public int MyFlashCardId { get; set; }
public virtual MyFlashCard MyFlashCard { get; set; }
}
und einem Modelbuilder:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyFlashCard>()
.HasMany(e => e.MyFlashCardPics)
.WithRequired(e => e.MyFlashCard)
.HasForeignKey(e => e.MyFlashCardId)
.WillCascadeOnDelete();
}
und wenn ich Migration hinzufügen wird es den folgenden Code erstellen:
CreateTable(
"dbo.MyFlashCardPic",
c => new
{
Id = c.Int(nullable: false, identity: true),
MyFlashCardId = c.Int(nullable: false),
MyFlashCard_Id = c.Int(),
MyFlashCard_Id1 = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.MyFlashCard", t => t.MyFlashCard_Id)
.ForeignKey("dbo.MyFlashCard", t => t.MyFlashCard_Id1)
.ForeignKey("dbo.MyFlashCard", t => t.MyFlashCardId, cascadeDelete: true)
.Index(t => t.MyFlashCardId)
.Index(t => t.MyFlashCard_Id)
.Index(t => t.MyFlashCard_Id1);
Ich habe nur MyFlashCardId
Spalte in MyFlashCardPic
Tabelle, aber es möchte eine andere Spalte erstellen wie: MyFlashCard_Id
, MyFlashCard_Id1
Ich möchte wissen, warum dies passiert und wie verhindern Sie es?
Wenn ich diese Spalten von oben Migration löschen, nachdem Datenbank (mit Update-Datenbank-Befehl) Erstellen wirft unter Fehler, wenn ich MyFlashCardPic
Einheit
Ungültiger Spaltenname ‚MyFlashCard_Id1‘, Invalid Spalte verwenden möchten Namen ‚MyFlashCard_Id‘
und wenn ich ich Problem diese Spalten nicht von der Migration löschen haben in Bearbeitung Flashkarte, die Bilder wie eine andere Frage habe ich vor kurzem
haben How to find out context objects that one entity is attached to?
ein weiterer Punkt ist, dass ohne
[ForeignKey("MyFlashCard")]
Attribut es 3 Indexspalte schaffen und ohne
modelBuilder.Entity<MyFlashCard>()
.HasMany(e => e.MyFlashCardPics)
.WithRequired(e => e.MyFlashCard)
.HasForeignKey(e => e.MyFlashCardId)
.WillCascadeOnDelete();
in OnModeling
es 4 Indexspalte
Anscheinend wird das Problem durch etwas verursacht, das hier nicht gezeigt wird. Erstellen Sie ein sauberes neues Projekt mit einem einzelnen db-Kontext, der nur das enthält, was Sie in den Post (und die neue Datenbank) aufgenommen haben, und Sie werden sehen, dass die Migration diese zusätzlichen Spalten nicht enthält. Daher müssen Sie [mcve] erstellen. Sobald Sie das tun, würden Sie wahrscheinlich die Ursache finden. –
Es gibt eine Beziehung zwischen 'MyFlashCard' und' MyFlashCardPic', wobei EF eine Standard-FK-Benennung anstelle einer benutzerdefinierten (bezeichnende_Entität + _ + PK-Name) generiert. Wenn bereits eine andere Beziehung mit demselben Namen vorhanden ist, fügt EF standardmäßig Suffixnummern hinzu, um doppelte FK-Benennung zu vermeiden. Sie können ein anderes Dummy-Projekt versuchen, um dieses Verhalten herauszufinden. –
Vielleicht könnte der Konsolenbefehl "Add-Migration [SOMENAME] -Force" es lösen? – Alex