1

这是我的数据库结构:
公司
CompanyID
CompanyName
...

位置
LocationID
LocationName
...

联系人
联系人
ID 联系人姓名 联系人
电子邮件

CompanyContact
ContactID
CompanyID
IsActive

LocationContact
ContactID
LocationID
IsActive

现在我为每个实体(CompanyContact、LocationContact)都有一个存储库

public List<Contact> GetCompanyContact(int CompanyID)
{
   return _context.CompanyContacts.Where(p => p.CompanyID == CompanyID).Select(s => s.Contact).ToList();
}
...
public List<Contact> GetLocationContact(int LocationID)
{
   return _context.LocationContacts.Where(p => p.LocationID == LocationID).Select(s => s.Contact).ToList();
}
...

如何创建通用方法来获取联系人列表。我想传递带有参考列名称(CompanyID,LocationID)的EntityName(CompanyContact 或LocationContact)。
我想要的示例:

public List<Contact> GetContact(string EntityName,String ColName){....}
Ex of call .
GetContact("CompanyContact","CompanyID");

多谢。

编辑
一个公司可以有很多联系人,一个位置也可以有很多联系人。

4

1 回答 1

4

大概,您的存储库中有您的数据库上下文,所以我会使用一些泛型和少量 lambda 来获得一些整洁的东西,如下所示:

public class MyRepository {
    var _context = new MyEFDatabaseEntities();

    public List<T> GetListOf<T>(Expression<Func<T, bool>> expression)
        where T : class {

        return _context.CreateObjectSet<T>().Where(expression).ToList();
    }
}

这个小小的单线让你做这样有趣的事情:

// first make a repository object
var repository = new MyRepository();

// now I can grab a list of contacts based on CompanyID
var contacts = repository.GetListOf<Contact>(c => c.ContactID == 12345);

// or I can get a list of contacts based on location
var contacts = repository.GetListOf<Contact>(c => c.LocationID == 12345);

// get all contacts for a company
var contacts = repository.GetListOf<CompanyContact>(c => c.CompanyID == 123).Contacts;

// get all confabs for a location
var contacts = repository.GetListOf<LocationContact>(c => c.CompanyID == 123).Contacts;
于 2011-03-01T20:23:36.843 回答