Мне нужно создать объект автоматической регистрации в этом Extention
в C # WPF:
public static class ModelBuilderExtention
{
public static void RegisterAllEntities<TBaseType>(this DbModelBuilder modelBuilder, params Assembly[] assemblies)
{
IEnumerable<Type> types = assemblies.SelectMany(x => x.GetExportedTypes())
.Where(x => x.IsClass && x.IsPublic && !x.IsAbstract && typeof(TBaseType).IsAssignableFrom(x));
foreach (Type type in types)
modelBuilder.RegisterEntityType(type);
}
public static void RegisterEntityTypeConfiguration(this DbModelBuilder modelBuilder,
params Assembly[] assemblies)
{
MethodInfo applyGenericMethod = typeof(DbModelBuilder).GetMethods().First(m => m.Name == nameof(DbModelBuilder.Configurations));
IEnumerable<Type> types = assemblies.SelectMany(a => a.GetExportedTypes())
.Where(c => c.IsClass && !c.IsAbstract && c.IsPublic);
foreach (Type type in types)
{
foreach (Type iface in type.GetInterfaces())
{
if (iface.IsConstructedGenericType && iface.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>))
{
MethodInfo applyConcreteMethod = applyGenericMethod.MakeGenericMethod(iface.GenericTypeArguments[0]);
applyConcreteMethod.Invoke(modelBuilder, new object[] { Activator.CreateInstance(type) });
}
}
}
}
}
и использовать это в ApplicationDbContext
:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base("MSSQL")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var entitiesAssembly = typeof(IEntity).Assembly;
modelBuilder.RegisterAllEntities<IEntity>(entitiesAssembly);
modelBuilder.RegisterEntityTypeConfiguration(entitiesAssembly);
}
}
, и этомой BaseEntity
:
public interface IEntity
{
}
public abstract class BaseEntity<T> : IEntity
{
public T Id { get; set; }
}
public abstract class BaseEntity : BaseEntity<int>
{
}
и это мой пример класса:
public class User: BaseEntity
{
public string Name { get; set; }
public string Pass { get; set; }
public byte Permission { get; set; }
public virtual ICollection<Logging> Logs { get; set; }
}
теперь, когда мне нужно Enable-Migrations
, он показывает мне эту ошибку:
Последовательность не содержит соответствующего элемента
Как решить эту ошибку:
Проверка, имеет ли контекст цель для существующей базы данных ... System.InvalidOperationException: Последовательность содержитнет соответствующего элемента в System.Linq.Enumerable.First [TSource] (предикат IEnumerable 1
source, Func
2) в Common.ModelBuilderExtentions.ModelBuilderExtention.RegisterEntityTypeConfiguration (DbModelBuilder modelBuilder, Assembly [] Assembly \ ModelBuildSundDB).cs: строка 27 в DataLayer.Context.ApplicationDbContext.OnModelCreating (DbModelBuilder modelBuilder) в D: \ Kianoush \ DataLayer \ Context \ ApplicationDbContext.cs: строка 25 в System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder ()
в System.Data.Entity.Internal.LazyInternalContext.CreateModel (LazyInternalContext internalContext) в System.Data.Entity.Internal.RetryLazy 2.GetValue(TInput input) at
System.Data.Entity.Internal.LazyInternalContext.InitializeContext()<br>
at
System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized()
at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext
context, XmlWriter writer) at
System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter
w) at
System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action
1 writeataEE).DbContextExtensions.GetModel (контекст DbContext) в System.Data.Entity.Migrations.DbMigrator..ctor (конфигурация DbMigrationsConfiguration, DbContext usersContext, DatabaseExistenceState creationState, логическое имяByCreateDatabase) в System.Data.Entity.bigrator.DM.) в System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor (DbMigrationsConfiguration migrationsConfiguration) в System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore () в System.Data.Entity.Migrations.Design.ade.BaseRunner.Run () Последовательность не содержит соответствующего элемента