ApplicationDbContext не реализует интерфейс - PullRequest
0 голосов
/ 24 октября 2018

Сначала я работаю над ASP.NET MVC Solution, используя код.Я получил эту ошибку в моем ApplicationDbContext

ApplicationDbContext

Класс ApplicationUser не имеет проблем

public class ApplicationUser : IdentityUser, IDeletableEntity
{
    public bool IsDeleted { get; set; }

    public DateTime? DeletedOn { get; set; }

    public string DeletedBy { get; set; }

    public string ImageUrl { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

        // Add custom user claims here
        return userIdentity;
    }
}

Ниже также мой IApplicationDbContext

using System.Data.Entity;
using System.Data.Entity.Infrastructure;

using SmartSIMS.Models.Entities.UserManagement.Models;
using SmartSIMS.Models;

public interface IApplicationDbContext
{
    DbSet<ApplicationUser> Users { get; set; }

    void SaveChanges();

    DbSet<TEntity> Set<TEntity>() where TEntity : class;

    DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
}

И, наконец, класс ApplicationDbContext, где у меня возникла проблема:

namespace SmartSIMS.Data.DBContext.Concrete
{

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
            //Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }

        #region ACADEMIC

        #region Academics
        public DbSet<Assignment> Assignments { get; set; }
        public DbSet<AssignmentSubmission> AssignmentSubmissions { get; set; }

        public new void SaveChanges()
        {
            try
            {
                base.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                // Retrieve the error messages as a list of strings.
                var errorMessages = ex.EntityValidationErrors
                        .SelectMany(x => x.ValidationErrors)
                        .Select(x => x.ErrorMessage);

                // Join the list to a single string.
                var fullErrorMessage = string.Join("; ", errorMessages);

                // Combine the original exception message with the new one.
                var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);

                // Throw a new DbEntityValidationException with the improved exception message.
                throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
            }
        }

        public new DbSet<TEntity> Set<TEntity>() where TEntity : class
        {
            return base.Set<TEntity>();
        }
    }
}

Я использую ASP.NET MVC 5 в Visual Studio 2017. Я потратил часы,но все еще не в состоянии решить проблему.Где я ошибся и что мне делать?

1 Ответ

0 голосов
/ 24 октября 2018

Ваш IApplicationDbContext предоставляет неверный тип для свойства Users, то есть интерфейса IDbSet<>, а не класса DbSet<>.

SaveChanges также не определен правильно, поскольку предполагается возвращать интерфейс int

Refactor для использования интерфейса IDbSet<> вместо свойства Users и также иметь SaveChanges вернуть int

public interface IApplicationDbContext {
    IDbSet<ApplicationUser> Users { get; set; }

    int SaveChanges();

    DbSet<TEntity> Set<TEntity>() where TEntity : class;
    DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
}

и соответствующим образом обновить конкретный класс в соответствии с интерфейсом

public int SaveChanges()
{
    try
    {
        return base.SaveChanges();
    }
    catch (DbEntityValidationException ex)
    {
        // Retrieve the error messages as a list of strings.
        var errorMessages = ex.EntityValidationErrors
                .SelectMany(x => x.ValidationErrors)
                .Select(x => x.ErrorMessage);

        // Join the list to a single string.
        var fullErrorMessage = string.Join("; ", errorMessages);

        // Combine the original exception message with the new one.
        var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);

        // Throw a new DbEntityValidationException with the improved exception message.
        throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
    }
}
...