2012-04-20 1 views
0

У меня есть программа с подключениями к 4 базам данных. В трех из этих баз данных объекты сущности очень похожи. Теперь мой вопрос довольно прост, но я не могу окунуться в голову, как действовать дальше.Объекты во многих подобных объектах я могу в любом случае сделать им общий интерфейс?

У меня есть три базы данных давайте назовем их 1 2 и 3 в тех, которые я получил несколько таблиц Б и С

Я спрашиваю, так как 1а и 2а и 3а почти такая же есть способ для меня сделайте что-нибудь подобное. ?

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 
} 

В основном моя надежда состоит в том, что я мог бы просто положить часть петли, чтобы его собственному методу и использовать его без необходимости настраивать его в отдельные таблицы?

+0

Столы похожи, или они одинаковы? В частности, нужны ли данные из них точно так же в каждой базе данных, или это зависит от них? Если вам нужны разные столбцы из каждой базы данных, или типы данных и структура немного различаются, вы не можете использовать интерфейсы для этой задачи. –

+0

таблицы немного меняются, но в этом случае мне нужны одни и те же столбцы на всех из них – Helbo

ответ

0

Вы можете определить интерфейс, содержащий элементы, которые ваши объекты имеют в общем, так:

public interface ICommonStuff 
{ 
    int CommonInt 
    { 
     get; 
    } 

    string CommonString 
    { 
     get; 
    } 
} 

... затем реализовать этот интерфейс в классах 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) 

Тогда вы должны выбрать из них:

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 
} 
+0

Это была моя первая идея, но поскольку классы A, B и C являются сущностями, которые они уже реализованы, и я уверен, что если я их изменю то они в конечном итоге перезапишут их самостоятельно, удалив мою модификацию – Helbo

+0

«Уже реализовано» тем, что? Ваша озабоченность по поводу перезаписи указывает, что это шаблон T4; это Entity Framework? Если существующие реализации находятся в частичных классах, вы можете написать отдельные частичные элементы, которые реализуют интерфейс. –

+0

Да, это структура сущности hmm Я не знал, что может быть полезно, посмотрим на это сейчас – Helbo