通用存储库实现因IEntity约束而失败

时间:2014-03-18 18:20:41

标签: c# entity-framework generics

我正在尝试实现通用存储库,但它失败了,因为没有从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”的隐式引用转换

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

看起来MyType没有实现IEntity接口。

使用编辑器打开您的DBML文件并添加以下属性:

EntityBase="IEntity"

Database元素。

编辑:不知道是否可以使用UI编辑器。

答案 1 :(得分:0)

D.R。的答案在短期内解决了我的问题,但最终我实现了扩展DBML对象的部分类。这种方法解决了几个问题。首先,每次有数据库更改时都不必编辑DBML文件。其次,这使我能够在需要时向DBML对象添加其他扩展属性和方法。

相关问题