Последовательность не содержит соответствующего элемента в C # WPF - PullRequest
0 голосов
/ 03 марта 2019

Мне нужно создать объект автоматической регистрации в этом 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 () Последовательность не содержит соответствующего элемента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...