Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 许多相似对象的实体,我可以让它们共享接口吗?_C#_.net_Sql_Service_Entities - Fatal编程技术网

C# 许多相似对象的实体,我可以让它们共享接口吗?

C# 许多相似对象的实体,我可以让它们共享接口吗?,c#,.net,sql,service,entities,C#,.net,Sql,Service,Entities,我有一个连接到4个数据库的程序。在其中三个数据库中,实体对象非常相似。现在我的问题很简单,但我不知道该怎么做 我有三个数据库,我们称它们为12和3 在这些表中,我有几个表a、b和c 我在问,因为1a和2a和3a几乎是一样的,我有没有办法做这样的事情 Using(interfaceDB DB = new DB1()) { var getTabelA = (from a in DB.a select a); } Using(interface DB = new DB2()) { var

我有一个连接到4个数据库的程序。在其中三个数据库中,实体对象非常相似。现在我的问题很简单,但我不知道该怎么做

我有三个数据库,我们称它们为12和3 在这些表中,我有几个表a、b和c

我在问,因为1a和2a和3a几乎是一样的,我有没有办法做这样的事情

Using(interfaceDB DB = new DB1())
{
   var getTabelA = (from a in DB.a select a);
}
Using(interface DB = new DB2())
{
   var getTabe2A = (from a in DB.a select a);
}
Using(interface DB = new DB3())
{
   var getTabe3A = (from a in DB.a select a);
}
foreach(interfaceDBTableA in getTabelA)
{
   //do something here
}
foreach(interfaceDBTableA in getTabe2A )
{
   //do something here
}
foreach(interfaceDBTableA in getTabe3A )
{
   //do something here
}

基本上,我的希望是,我可以将循环部分放入它自己的方法中并重用它,而无需将其自定义到单个表中?

您可以定义一个包含对象共同成员的接口,如下所示:

public interface ICommonStuff
{
    int CommonInt
    {
        get;
    }

    string CommonString
    {
        get;
    }
}
using (interfaceDB DB = new DB1())
{
    var getTable1A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB2())
{
    var getTable2A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB3())
{
    var getTable3A = (from a in DB.a select a).Cast<ICommonStuff>();
}

var everythingLikeA = getTable1A.Concat(getTable2A).Concat(getTable3A);

foreach (ICommonStuff commonStuff in everythingLikeA)
{
    // do something here with commonStuff.CommonInt and commonStuff.CommonString
}
…然后在类
A
B
C
中实现该接口:

public class A : ICommonStuff
{
    public int AInt { get; set; }

    public string AString { get; set; }

    public int CommonInt
    {
        get { return this.AInt; }
    }

    public string CommonString
    {
        get { return this.AString; }
    }
}

public class B : ICommonStuff
{
    public int BInt { get; set; }

    public string BString { get; set; }

    public int CommonInt
    {
        get { return this.BInt; }
    }

    public string CommonString
    {
        get { return this.BString; }
    }
}

... (same for C)
然后您应该能够像这样选择它们:

public interface ICommonStuff
{
    int CommonInt
    {
        get;
    }

    string CommonString
    {
        get;
    }
}
using (interfaceDB DB = new DB1())
{
    var getTable1A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB2())
{
    var getTable2A = (from a in DB.a select a).Cast<ICommonStuff>();
}

using (interface DB = new DB3())
{
    var getTable3A = (from a in DB.a select a).Cast<ICommonStuff>();
}

var everythingLikeA = getTable1A.Concat(getTable2A).Concat(getTable3A);

foreach (ICommonStuff commonStuff in everythingLikeA)
{
    // do something here with commonStuff.CommonInt and commonStuff.CommonString
}
使用(interfacedbdb=newdb1())
{
var getTable1A=(从DB.a中的a选择a.Cast();
}
使用(接口DB=newdb2())
{
var getTable2A=(从DB.a中的a选择a.Cast();
}
使用(接口DB=new DB3())
{
var getTable3A=(从DB.a中的a选择a.Cast();
}
var everythingLikeA=getTable1A.Concat(getTable2A.Concat(getTable3A);
foreach(Iconommunic,每一样东西都有凝灰岩)
{
//在这里使用commontuff.CommonInt和commontuff.CommonString执行一些操作
}

这些表是相似的,还是相同的?特别是,每个数据库中需要的数据是完全相同的,还是有所不同?如果每个数据库需要不同的列,或者数据类型和结构略有不同,则无法真正使用接口执行此任务。表略有不同,但在本例中,我需要所有表上的列相同这是我的第一个想法,但由于类A,B和C是实体,它们已经实现了,我很确定,如果我修改它们,那么它们最终会通过删除我的修改“已经实现”来覆盖它们?您对覆盖的担忧表明它是T4模板;它是实体框架吗?如果现有的实现是在分部类中,你可以编写单独的分部来实现接口。是的,是实体框架,嗯,我不知道它可能有用。现在我会看看它。我一直在努力让这个想法起作用,但在我看来,这不是一个可行的解决方案,我不断遇到障碍,使它变得非常有用与有很多类似的代码相比,这条路很难走下去。我只是讨厌我不能轻易地使99%的相似代码可重用:(我将你设置为正确答案,因为它的一部分是我一直在使用的,而不是在数据库中使用它,我一直在各个表中使用它。