Невозможно использовать свойства модели во время компиляции в c# - PullRequest
0 голосов
/ 01 февраля 2020

Я разрабатываю приложение в Asp. net MVC ядре, в котором я использую обобщенный c интерфейс, как показано ниже:

public interface IRepository<TEntity, TKeyType> where TEntity : class where TKeyType : struct
{
    TEntity Add(TEntity entity);
}

И ниже приведена реализация it.

  public class EntityRepository<TEntity, TKeyType> : IRepository<TEntity, TKeyType> where TEntity : class where TKeyType : struct
{
    protected readonly DrinkDbContext Context;
    protected readonly DbSet<TEntity> DbSet;

    public EntityRepository(DrinkDbContext context)
    {
        Context = context;
        DbSet = context.Set<TEntity>();
    }

    public virtual TEntity Add(TEntity entity)
    {
        Context.Add(entity);
        return entity;
    }
}

Кроме того, я наследую класс EntityRepository в ShoppingCartRepository, который выглядит следующим образом:

 public class ShoppingCartRepository<ShoppingCartItem, Int32> : EntityRepository<ShoppingCartItem, Int32>
    where ShoppingCartItem : class where Int32 : struct
{
    public ShoppingCartRepository(DrinkDbContext context) : base(context) { }

    public override ShoppingCartItem Add(ShoppingCartItem entity)
    {
        base.Add(entity);
        return entity;
    }
}

и способен видеть заполненные свойства класса в методе во время выполнения , Пожалуйста, найдите скриншот как показано ниже:

enter image description here

Но когда я пытаюсь использовать эти свойства во время компиляции, я не могу увидеть эти свойства. Снимок экрана приведен ниже.

enter image description here

Как получить доступ к свойствам ShoppingCartItem , который передается в метод Add как параметр?

1 Ответ

1 голос
/ 01 февраля 2020

Проблема в том, что ваша ShoppingCartRepository рассматривается как обобщенная c. ShoppingCartRepository<ShoppingCartItem,int> -> В этом сценарии ShoppingCartItem имеет тип class, который вы его ограничили.

Это похоже на запись ShoppingCartRepository<T,int>. Таким образом, ваш ShoppingCartItem рассматривается не как тип ShoppingCartItem, а как обобщенный c типа T, где T : class.

Поэтому class не имеет доступа к свойствам ShoppingCartItem в методе Add.

Обновление до этого:

public class ShoppingCartRepository : EntityRepository<ShoppingCartItem, Int32>

Это делает ваш ShoppingCartRepository non generi c. Я не думаю, что вам нужен ShoppingCartRepository generi c, так как вы указываете реализацию для ShoppingCartItem.

с указанным выше изменением. У вас должен быть доступ к ShoppingCartItem свойствам внутри метода Add.

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