Ho iniziato con C# e volevo creare il mio DB.Violazione della chiave primaria Entity Framework Code First
ho due modelli
public class AModel
{
public Guid ID { get; private set; }
public string Name { get; set; }
public int Count { get; set; }
public AModel()
{
this.ID = Guid.NewGuid();
}
}
public class BModel
{
public Guid ID { get; private set; }
public string Name { get; set; }
public AModel Model { get; set; }
public BModel()
{
this.ID = Guid.NewGuid();
}
}
Quando cerco di salvare BModel a DB, ottengo questo errore:
Violation of PRIMARY KEY constraint 'PK_dbo.AModels'. Cannot insert duplicate key in object 'dbo.AModels'. The duplicate key value is (48ee1711-8da4-46c1-a714-19e985211fed).\r\nThe statement has been terminated.
ho pensato che sarebbe stato risolto con questo
modelBuilder.Entity<BModel>().HasRequired(t => t.Model).WithMany();
ma sembra che io sia completamente perso. Qualcuno potrebbe aiutarmi con questo semplice esempio?
Il messaggio di errore è criptico perché le probabilità di duplicati le chiavi con un Guid sono astronomicamente improbabili. Ciò che sospetto, tuttavia, è che a causa della mappatura errata, si stia tentando di creare più chiavi esterne identiche. Cosa succede se si utilizza 'modelBuilder.Entity() .HasRequired (t => t.Model) .WithMany(). Map (x => {x.ToTable (" BAs "); x.MapLeftKey (" BId ") ; x.MapRightKey ("AId");}); '? –
Non sto creando una nuova istanza di AModel durante la creazione di BModel, ma invece, sto scegliendo un'istanza di AModel già creata da Combobox. Voglio solo creare riferimenti da BModel a AModel. – xfrog
Come funzionerà? stai creando un nuovo GUID ogni volta che viene creato un nuovo modello. e c'è un set privato.Quando recupera una modalità dai dati, come assegnerà un valore all'ID? –