Проблема несогласованной доступности в .NET

#c# #.net #entity-framework #accessibility #three-tier

Вопрос:

Я создаю демонстрационную версию трехуровневой архитектуры .ЧИСТЫЙ проект. Когда я создавал свои слои, я столкнулся с этой ошибкой.

Описание кода серьезности Ошибка состояния подавления строки файла проекта CS0060 Несогласованная доступность: базовый класс «EfEntityRepositoryBase<Product, NorthwindContext>» менее доступен, чем класс «EfProductDal» Доступ к данным C:Users90553sourcereposkodlamaio_bootcampMyFinalProjectDataAccessConcreteEntityFrameworkEfProductDal.cs 13 Активных

EfProductDal.cs:

 using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;


namespace DataAccess.Concrete.EntityFramework
{
    public class EfProductDal : EfEntityRepositoryBase<Product, NorthwindContext>, IProductDal
    {
        
    }
}
 

EfEntityRepositoryBase.cs:

 using Core.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Core.DataAccess.EntityFramework
{
    public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity>
        // Give constraints
        where TEntity : class, IEntity, new()
        where TContext : DbContext, new()
    {
        public void Add(TEntity entity)
        {
            // IDisposable pattern implementation of c#
            // if program done with NorthwindContext, context is collected by garbage collector 
            using (TContext context = new TContext())
            {
                // create relation between references
                var addedEntity = context.Entry(entity);
                addedEntity.State = EntityState.Added;
                context.SaveChanges();
            }
        }

        public void Delete(TEntity entity)
        {
            using (TContext context = new TContext())
            {
                // create relation between references
                var deletedEntity = context.Entry(entity);
                deletedEntity.State = EntityState.Deleted;
                context.SaveChanges();
            }
        }

        public TEntity Get(Expression<Func<TEntity, bool>> filter)
        {
            using (TContext context = new TContext())
            {
                return context.Set<TEntity>().SingleOrDefault(filter);
            }
        }


        public List<TEntity> GetAll(Expression<Func<TEntity, bool>> filter = null)
        {
            using (TContext context = new TContext())
            {
                return filter == null
                    ? context.Set<TEntity>().ToList()
                    : context.Set<TEntity>().Where(filter).ToList();
            }

        }

        public void Update(TEntity entity)
        {
            using (TContext context = new TContext())
            {
                var updatedEntity = context.Entry(entity);
                updatedEntity.State = EntityState.Modified;
                context.SaveChanges();
            }
        }
    }
}
 

IEntityRepository.cs:

 using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Core.DataAccess
{
    // Generic Constraint
    // class: reference type
    // IEntity: It can be IEntity or any object that implements IEntity
    // new(): must be object that can used with new
    public interface IEntityRepository<T> where T:class,IEntity,new()
    {

        List<T> GetAll(Expression<Func<T,bool>> filter=null);

        T Get(Expression<Func<T,bool>> filter);
        void Add(T entity);

        void Update(T entity);

        void Delete(T entity);

    }
}
 

Образ обозревателя решений:

Образ обозревателя решений

Несмотря на то, что все мои классы являются общедоступными, почему visual studio выдает ошибку о меньшей доступности. Какая-Нибудь Помощь?

Комментарии:

1. Поделитесь, пожалуйста, информацией

2. Я подозреваю Product или NorthwindContext это внутреннее, но мы не можем сказать.

3. Почистить, отстроить заново. У вас есть проекты, зависящие от других проектов (и убедитесь, что эти зависимости верны, то есть это не жестко заданные местоположения, а ссылки на проекты); устаревшие двоичные файлы объясняют это.

4. @JonSkeet Я пропустил добавление public в класс NorthwindContext. Спасибо за вашу помощь.