Я предлагаю немного изменить предложения, приведенные выше.
Это не огромное улучшение, но, по крайней мере, оно дает вам некоторое разделение интересов.
Когда мастер EF создает файл .edmx и связанный с ним файл .Designer .cs
, код C # объявляет частичный класс. Таким образом, вы можете просто добавить еще один .cs
файл в проект, содержащий два файла EDM.
Этот новый файл определяет дополнительную статическую функцию для того же пространства имен и класса.
Эта новая статическая функция будет возвращать экземпляр нужного типа (потомок ObjectContext).
Новый файл является отдельным файлом, поэтому он не будет перезаписан, если вы заново создадите .edmx и .Designer.cs.
Вы копируете и вставляете строку подключения из .config проекта EDM, что является своего рода хаком, но, по крайней мере, сохраняет строку подключения скрытой в проекте EDM.
Новый файл выглядит так:
namespace MyNamespace
{
public partial class MyEntities : ObjectContext
{
public static MyEntities New_MyEntities()
{
string connStr;
MyEntities theContext;
connStr = "metadata=res://*/MyClass.csdl|res://*/MyClass.ssdl|res://*/MyClass.msl;provider=System.Data.SqlClient;provider connection string=\"Data Source=localhost\\SQLSERVER;Initial Catalog=MyDb;Integrated Security=True;MultipleActiveResultSets=True\"";
// set the connection string
theContext = new MyEntities(connStr);
// allocate it
return theContext;
// return it
}
}
}
Чтобы получить новый объект сущностей, вы просто вызываете статическую функцию New_MyEntities () из вызывающего проекта.