Ho una classe di entità di base MyCompany.Core.Model.User
che deve essere utilizzato per le proprietà comuni di un User
entità:Il tipo 'Company.Model.User' e il tipo 'Company.Core.Model.User' hanno entrambi lo stesso nome semplice di 'Utente' e quindi non possono essere utilizzati nello stesso modello
public class User
{
public string Username { get; set; }
public string Usercode { get; set; }
}
ho anche una classe corrispondenza base MyCompany.Core.Model.UserMap
per impostare il codice primi mappature per la base User
classe:
public class UserMap<TUser> : EntityMapBase<TUser>
where TUser : User
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.Usercode);
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.Username).HasColumnName("Username");
this.Property(t => t.Usercode).HasColumnName("UserCode");
}
}
In un separato assembly ho una classe derivata MyCompany.Model.User
che eredita dalla classe base User
e si estende con alcune proprietà aggiuntive:
public class User : Core.User
{
public string Surname { get; set; }
}
Inoltre Ho una classe di mappatura derivata MyCompany.Model.UserMap
per fornire la configurazione aggiuntiva per le proprietà aggiuntive:
public class UserMap : Core.UserMap<User>
{
public UserMap()
{
this.Property(t => t.Surname).HasColumnName("Surname");
}
}
Tuttavia quando si aggiunge MyCompany.Model.User
al contesto e si registra il MyCompany.Model.UserMap
Viene visualizzato il seguente errore:
Il tipo "MyCompany.Model.User" e il tipo "MyCompany.Core.Model.User" hanno entrambi lo stesso nome semplice di "Utente" e quindi non possono essere utilizzati nello stesso modello. Tutti i tipi in un determinato modello devono avere nomi semplici univoci. Utilizzare 'NotMappedAttribute' o chiamare Ignore nel codice Prima API fluente per escludere esplicitamente una proprietà o un tipo dal modello.
Questo link indica che non è possibile avere lo stesso "nome semplice" nel modello due volte.
Perché la classe di base "nome semplice" viene registrata nel modello e esiste un modo per implementare questo tipo di ereditarietà di entità?
Sospetto che la soluzione semplice sarebbe quella di rinominare la classe derivata; tuttavia preferirei evitare questo perché potrebbero esserci molte derivazioni in più contesti.
Nota: L'uso Entity Framework 6.0.0-rc1 (prerelease)
Sto combattendo la stessa cosa. Sei arrivato a una soluzione? –
@JasonCragun Purtroppo no. Ho appena finito di rinominare la classe base in UserBase. –