Sto cercando di costruire il mio primo tavolo Splitting in EF Core 2 usando una fluente configurazione.
Ho due entità semplici denominate User
e Customer
e voglio usarle in una singola tabella denominata "AppUsers". Così ho creato una semplice classe di entità per entrambi:
User.cs
public partial class User
{
public long Id { get; set; }
public string Name { get; set; }
public Customer Customer { get; set; }
}
E:
customer.cs
public partial class Customer
{
public long Id { get; set; }
public Guid CustomerGuid { get; set; }
public User User { get; set; }
}
Quindi MyDbContext
le modifiche a MyDbContext
come:
MyDbContext.cs
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOne(c => c.Customer).WithOne(c => c.User)
.HasForeignKey<Customer>(e => e.Id);
modelBuilder.Entity<User>().ToTable("AppUsers");
modelBuilder.Entity<Customer>().ToTable("AppUsers");
base.OnModelCreating(modelBuilder);
}
}
E poi ho creato una migrazione usando Add-Migration "Simple_Test"
senza errori. Così eseguo Update-Database
che ha funzionato bene senza errore console, ma quando provo a eseguire app ricevendo questo errore:
L'entità di 'Utente' condivide la tabella 'AppUsers' con 'Cliente', ma non esiste un'entità di questo tipo con lo stesso valore chiave che è stato contrassegnato come 'Aggiunto'
Non capisco questo. Sono studente appena iniziato a conoscere la configurazione delle relazioni. Qualche idea per favore?
Il problema è che ogni riga nella tabella del database contiene ora campi di due entità: un utente e un cliente. Ciò significa che ogni volta che un utente viene creato e salvato, deve esserci anche un cliente creato e salvato con lo stesso ID, poiché la riga del database non può contenere solo un utente o solo un cliente, deve avere entrambi.
Ho aggiunto il seme del cliente in un altro metodo che è il mio pazzo. Deve essere in seme dell'utente.
var user = new User(); user.Customer = new Customer { Id = user.Id }