Я работаю в asp.net core Проект с использованием EF core. Я сопоставил свои объекты, переопределив функцию OnModelCreating в классе контекста. Я могу легко сопоставить эти объекты вручную. Ну, я бы лучше разместить свои коды и объяснить ..Регистрация картографирования объектов
Это то, что я сделал в моем Context классе:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
//builder.RegisterEntityMapping<CodeTable, CodeTableMap>();
builder.RegisterEntityMapping<Country, CountryMap>();
builder.RegisterEntityMapping<State, StateMap>();
builder.RegisterEntityMapping<City, CityMap>();
builder.RegisterEntityMapping<User, UserMap>();
builder.RegisterEntityMapping<Prospect, ProspectMap>();
}
Country.cs
public class Country:BaseEntity
{
public string CountryCode { get; set; }
public string CountryName { get; set; }
public string Currency { get; set; }
public string CurrencyName { get; set; }
public string UnitOfMeasure { get; set; }
public string TelephoneCountryCode { get; set; }
public string CurrencySymbol { get; set; }
public virtual ICollection<State> States { get; set; }
public virtual ICollection<City> Cities { get; set; }
}
CountryMap.cs
public class CountryMap : QuantumEntityTypeConfiguration<Core.Domain.Country>
{
public override void Map(EntityTypeBuilder<Core.Domain.Country> builder)
{
builder.ToTable("Country");
builder.HasKey(pr => pr.CountryCode);
builder.HasMany(m => m.Cities).WithOne(i=> i.Country).HasForeignKey(m=> m.CountryCode);
builder.HasMany(m => m.States).WithOne(i => i.Country).HasForeignKey(m => m.CountryCode);
}
}
Но я хотел бы сделать это динамически, так как позже было бы набросано отобразить все модели. Я мог бы найти решение в контексте класса nopCommerce, где они делали таким образом:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//dynamically load all configuration
//System.Type configType = typeof(LanguageMap); //any of your configuration classes here
//var typesToRegister = Assembly.GetAssembly(configType).GetTypes()
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType &&
type.BaseType.GetGenericTypeDefinition() == typeof(NopEntityTypeConfiguration<>));
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}
//...or do it manually below. For example,
//modelBuilder.Configurations.Add(new LanguageMap());
base.OnModelCreating(modelBuilder);
}
Я попытался осуществить это, и я получил сообщение об ошибке:
protected override void OnModelCreating(ModelBuilder builder)
{
// TODO: Use Dynamic mapping by getting classes which uses QuantumEntityTypeConfiguration
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType &&
type.BaseType.GetGenericTypeDefinition() == typeof(QuantumEntityTypeConfiguration<>));
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
builder.Configurations.Add(configurationInstance); //Error in this line specifying:ModelBuilder has no defination for Configuration.
}}
Ну nopCommerce использует DbModelBuilder из пространства имен: System.Data.Entity и я использую ModelBuilder в пространстве имен: Microsoft.EntityFrameworkCore.
Итак, если у вас есть какие-либо решения или рекомендации. пожалуйста, дай мне знать.
Полезного GitHub вопрос: HTTPS : //github.com/aspnet/EntityFramework/issues/2805 см. последнюю запись, а также https://github.com/Grinderofl/FluentModelBuilder –