我正在尝试实现通用存储库,但它失败了,因为没有从DBML对象到通用实体的隐式转换。我不知道如何让DBML对象继承IEntity,或者甚至是解决方案。
以下是我正在使用的接口和存储库签名。
public interface IEntity
{
int ID { get; }
}
public interface IRepository<T> : IDisposable
{
....
}
public class Repository<T> : IRepository<T> where T : class, IEntity
{
....
}
这是Model类。它失败了第9行的错误(如下所示),其中在构造函数中实例化了存储库类的实例。这只是在我将IEntity约束添加到Repository类之后才开始发生的。
public class MyModel
{
DataContext DC;
Repository<MyType> MyRep;
public MyModel()
{
DC = new DataContext("ConnStr");
MyRep = new Repository<MyType>(DC);
}
}
以下是错误:该类型不能用作泛型类型或方法中的类型参数“T”。没有从“MyType”到“IEntity”的隐式引用转换
提前感谢您的帮助。
答案 0 :(得分:1)
看起来MyType
没有实现IEntity
接口。
使用编辑器打开您的DBML文件并添加以下属性:
EntityBase="IEntity"
到Database
元素。
编辑:不知道是否可以使用UI编辑器。
答案 1 :(得分:0)
D.R。的答案在短期内解决了我的问题,但最终我实现了扩展DBML对象的部分类。这种方法解决了几个问题。首先,每次有数据库更改时都不必编辑DBML文件。其次,这使我能够在需要时向DBML对象添加其他扩展属性和方法。