微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#泛型继承数据访问

嗨,我想创建一个继承的基类,但我遇到了一些问题.

我有两个类几乎完成相同的工作,但从不同的数据库获取它们使用的数据,并使用不同的内部数据结构来操作数据.
我想在基础中使用虚拟doSomething方法,理想情况下也可以在基础中使用虚拟dataAccess方法.

第二个问题可以通过使用泛型来解决,但我不能使用泛型来解决一个问题,因为我使用的DBMl上下文的构造函数不是无参数的.

我是不是错了.我想要干,但似乎正在反对继承.

示例代码如下.

class Foo    {
private _ctx DBML.Database1; // Inherits from System.Data.Linq.DataContext

public Foo(string constring)    {
    _ctx = new DBML.Database1(constring);
}

private DoSomeThing()   {

    FooDataObj = DataAccess(1);
}

private FooDataObj DataAccess(int ID)
{
    var v = from t in _ctx
            where t.Id = ID
            select new FooDataObj(t);

    return v
}
}

class Bar    {
private _ctx DBML.Database2; // Inherits from System.Data.Linq.DataContext

public Bar(string constring)
{
    _ctx = new DBML.Database2(constring);
}

private DoSomeThing()   {

    BarDataObj = DataAccess(1);
}

private BarDataObj DataAccess(int ID)   {
    var v = from t in _ctx
            where t.Id = ID
            select new BarDataObj(t);

    return v
}
}

解决方法

Foo和Bar不应该自己调用数据库构造函数,数据库对象应该是构造函数的参数(而不是连接字符串).这个原则称为依赖注入,将解决您的大多数问题.应该很容易然后创建一个新的泛型类DataObjFactory< DataObjType>作为Foo和Bar的替代品.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐