Реализация универсального репозитория не выполняется с ограничением IEntity

Я пытаюсь реализовать общий репозиторий, и он терпит неудачу, потому что нет никакого неявного преобразования из объекта DBML в общий объект. Я не знаю, как сделать объект DBML наследованием от IEntity, или если это даже решение.

Ниже приведены интерфейсы и подписи репозитория, которые я использую.

public interface IEntity
{
 int ID { get; } 
}

public interface IRepository<t> : IDisposable
{
 ....
}

public class Repository<t> : IRepository<t> where T : class, IEntity
{
 ....
}
</t></t></t>

Это класс модели. Он не работает с ошибкой (ниже) в строке 9, где экземпляр класса репозитория создается в constuctor. Это началось только после того, как я добавил ограничение IEntity в класс репозитория.

public class MyModel
{
 DataContext DC;
 Repository<mytype> MyRep;

 public MyModel()
 {
 DC = new DataContext("ConnStr");
 MyRep = new Repository<mytype>(DC);

 }
}
</mytype></mytype>

Вот ошибка: тип не может использоваться как параметр типа "T" в родовом типе или методе. Нет никакого неявного преобразования ссылок из 'MyType' в 'IEntity'

Заранее спасибо за вашу помощь.

2 ответа

Похоже, MyType не реализует интерфейс IEntity.

Откройте файл DBML с помощью редактора и добавьте следующий атрибут:

EntityBase="IEntity"

к элементу Database.

Изменение: не знаю, возможно ли это с помощью редактора пользовательского интерфейса.


Решение DR решило мою проблему в краткосрочной перспективе, но в конечном итоге я реализовал частичные классы, которые расширяют объекты DBML. Этот подход разрешил пару вопросов. Во-первых, файл DBML не нужно редактировать каждый раз, когда есть изменения в базе данных. Во-вторых, это дает мне возможность добавлять другие свойства и методы расширения к объектам DBML, когда это необходимо.

licensed under cc by-sa 3.0 with attribution.