Итак, в моем проекте EF4 я открыл частичные классы как самого файла DataContext, так и пары таблиц / объектов, созданных DataContext. Однако, если я открою класс «Продукты» как частичный, не будет (насколько я могу судить) прямой ссылки от продукта к классу DataContext, который его породил.
public partial class Product
{
public DataContext GetContext()
{
return this.DataContext;
// FAILS!!! No connection from 'this' to DataContext
// makes sense because "Product" isn't REALLY derived from DataContext
//...but still, I want this to work!
}
}
Но внутри по частичному продукту class, я бы хотел иметь возможность напрямую запрашивать базу данных, и мне очень нравится иметь возможность инициализировать только один экземпляр DataContext и использовать его для моих запросов страницы aspx.cs, а также запросов, выполняемых из частичных классов, которые вызываются со страницы aspx.cs.
Итак, мое решение до сих пор это передать экземпляр DataContext в качестве параметра 'ref' методам моего частичного класса, которым нужно ковыряться в базе данных. Вот частичный класс:
public partial class Complaint
{
public IEnumerable<Person> GetPByRole(InvestigationRole roleEnum, ref DataContext dbase)
{
var role = dbase.GetRole(roleEnum);
return this.PeopleOnInvestigations
.Where(x => x.InvestigationRoleID == 1)
.Select(x => x.Person);
}
}
Так есть ли обратная сторона в передаче моего объекта DataContext в качестве параметра ref любым методам частичного класса, которым требуется доступ к базе данных через это соединение? Одним из преимуществ является то, что после его передачи в качестве ссылки я могу добавить к нему новые сущности AddObject () из этих частичных классов, и как только мои SaveChanges обратятся к моей странице asp.cs, ВСЕ изменения (из aspx и из методов частичного класса) выполняются.