Класс не может использоваться как параметр для MigrateDatabaseToLatestVersion - PullRequest
0 голосов
/ 29 февраля 2020

Я переписываю текущую рабочую систему POS, созданную в C# с использованием. NET Framework. При попытке построить проект компилятор возвращает ошибку CS0311, в которой говорится, что тип данного параметра не может быть использован.

Я исследовал используемые классы и все, что нужно, в соответствии с документацией. NET определяется в классе, поэтому я понятия не имею, почему он не работает.

Код, используемый в EfDbContext.cs:

using NLog;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Validation;
using System.Linq.Expressions;
using Dal.Migrations;
using Dal.Model;

namespace Dal
{
    public class EfDbContext : DbContext
    {
        private static readonly Logger logger = LogManager.GetCurrentClassLogger();

        public EfDbContext()
          : base(Settings.ConnectionString ?? "")
        {
            Database.SetInitializer<EfDbContext>((IDatabaseInitializer<EfDbContext>) new MigrateDatabaseToLatestVersion<EfDbContext, Configuration>());
            EfDbContext.logger.Debug("Database entity context initialized");
        }

        public DbSet<Member> Members { get; set; }

        public DbSet<Role> Roles { get; set; }

        public DbSet<Category> Categories { get; set; }

        public DbSet<Product> Products { get; set; }

        public DbSet<TaxCategory> TaxCategories { get; set; }

        public DbSet<Ticket> Tickets { get; set; }

        public DbSet<TicketLine> TicketLines { get; set; }

        public DbSet<MemberCard> MemberCards { get; set; }

        public DbSet<CheckoutSheet> CheckoutSheets { get; set; }

        public DbSet<Transaction> Transactions { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Entity<Ticket>().HasMany<TicketLine>((Expression<Func<Ticket, ICollection<TicketLine>>>)(p => p.TicketLines)).WithRequired().WillCascadeOnDelete(true);
            modelBuilder.Entity<Ticket>().HasMany<Transaction>((Expression<Func<Ticket, ICollection<Transaction>>>)(p => p.Transactions)).WithOptional((Expression<Func<Transaction, Ticket>>)(m => m.Ticket)).WillCascadeOnDelete(true);
            modelBuilder.Entity<Member>().HasMany<MemberCard>((Expression<Func<Member, ICollection<MemberCard>>>)(p => p.MemberCards)).WithRequired((Expression<Func<MemberCard, Member>>)(m => m.Member));
            modelBuilder.Entity<CheckoutSheet>().HasMany<Ticket>((Expression<Func<CheckoutSheet, ICollection<Ticket>>>)(p => p.Tickets)).WithOptional((Expression<Func<Ticket, CheckoutSheet>>)(m => m.CheckoutSheet)).WillCascadeOnDelete(true);
        }

        public override int SaveChanges()
        {
            try
            {
                return base.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                throw new FormattedDbEntityValidationException(ex);
            }
        }

        ~EfDbContext()
        {
            EfDbContext.logger.Debug("Database entity context destroyed");
        }
    }
}

Код, используемый в Configuration.cs:

using NLog;
using System.Data.Entity;
using System.Data.Entity.Migrations;

namespace Dal.Migrations
{
    internal sealed class Configuration : DbMigrationsConfiguration<DbContext>
    {
        private static readonly Logger logger = LogManager.GetCurrentClassLogger();

        public Configuration()
        {
            this.AutomaticMigrationsEnabled = true;
            this.AutomaticMigrationDataLossAllowed = true;
            this.ContextKey = "POS.Dal.EfDbContext";
        }

        protected override void Seed(DbContext context)
        {
            Configuration.logger.Info("Database migration completed");
        }
    }
}

[Ошибка CS0311, возвращаемая компилятором] [1]

Error   CS0311  
The type 'Dal.Migrations.Configuration' cannot be used as type parameter 'TMigrationsConfiguration' in the generic type or method 'MigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>'. There is no implicit reference conversion from 'Dal.Migrations.Configuration' to 'System.Data.Entity.Migrations.DbMigrationsConfiguration<Dal.EfDbContext>'.    
Dal 2   
D:\lagae\Documents\Point Of Sale\POS\Dal    
D:\lagae\Documents\Point Of Sale\POS\Dal\EfDbContext.cs 
Line 20 
Column 134  

Кто-нибудь видит, что я сделал не так?

С уважением,

Jerlag_01

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