Ich modelliere eine neue Datenbank von EF CodeFirst. Hier habe ich eine abstrakte Basisklasse und jede Domain-Modell aus dieser Klasse geerbt:Entity Framework: Ist es möglich, von der Basiskonfigurationsklasse zu erben?
public abstract class Entity
{
public Guid Id { get; set; }
public byte [] TimeStamp { get; set; }
}
Und es gibt viele Klassen wie:
public class Country : Entity
{
public string Name { get; set; }
public string InternationalCode { get; set; }
public Location Location { get; set; }
public ICollection<City> Cities { get; set; }
public Country(string name, string internationalCode, decimal latitude, decimal longitude)
: this(name, internationalCode)
{
Location.Latitude = latitude;
Location.Longitude = longitude;
}
public Country(string name, string internationalCode) : this()
{
Name = name;
InternationalCode = internationalCode;
}
public Country()
{
Location = new Location();
Cities = new List<City>();
}
}
und Konfiguration jedes Modells basiert auf FluentAPI:
public CountryConfiguration()
{
HasKey(p => p.Id);
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.TimeStamp).IsRowVersion();
Property(p => p.Name).IsRequired().HasMaxLength(100);
Property(p => p.InternationalCode).IsRequired().HasMaxLength(5);
HasMany(p => p.Cities)
.WithOptional(p => p.BelongedCountry)
.HasForeignKey(p => p.BelongedCountryId);
}
Das Problem ist, dass
HasKey(p => p.Id);
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.TimeStamp).IsRowVersion();
Dieses Stück wurde mehr als 30 mal für jedes Domänenmodell kopiert. Gibt es eine Möglichkeit, Konfigurationsklassen von EntityTypeConfiguration zu erben, aber auch die Konfiguration von Entity Configuration übernehmen?
public class EntityConfiguration : EntityTypeConfiguration<Entity>
{
public EntityConfiguration()
{
HasKey(p => p.Id);
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.TimeStamp).IsRowVersion();
}
}
Ich weiß, dass C# keine Mehrfachvererbung erlaubt. Was kannst du vorschlagen?
Sie sollten eine neue Frage dazu stellen. Aber Sie sollten die ersten 3 Zeilen dieses Codes nicht benötigen. Da Ihre Config-Klassen von der Basis-Config-Klasse erben. – mxmissile
@mxmissile, nein, hier verwende ich "normale" Config-Klassen ohne Vererbung angewendet. Ich werde dir Ratschläge folgen und eine andere Frage stellen. –