Я моделирую новую базу данных EF CodeFirst. Здесь у меня есть абстрактный базовый класс и все модели предметной области, унаследованные от этого класса:Entity Framework: можно ли наследовать из базового класса конфигурации?
public abstract class Entity
{
public Guid Id { get; set; }
public byte [] TimeStamp { get; set; }
}
И там много классов, как:
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>();
}
}
и конфигурация каждой модели на основе 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);
}
проблема заключается в том, что
HasKey(p => p.Id);
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.TimeStamp).IsRowVersion();
этот кусок скопирован более чем в 30 раз для каждой модели домена. Есть ли способ сделать классы конфигурации наследовать от EntityTypeConfiguration, но также наследовать \ содержать конфигурацию из конфигурации Entity?
public class EntityConfiguration : EntityTypeConfiguration<Entity>
{
public EntityConfiguration()
{
HasKey(p => p.Id);
Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.TimeStamp).IsRowVersion();
}
}
Я знаю, что C# не допускает множественного наследования. Что вы можете предложить?
Вы должны задать новый вопрос. Но вам не нужны первые три строки этого кода. Поскольку ваши классы конфигурации наследуются от базового конфигурационного класса. – mxmissile
@mxmile, нет, здесь я использую «обычные» классы конфигурации без наследования. Я последую за советом и задаю другой вопрос. –