У меня есть база данных, 90% созданная с помощью EF 4.1 + Code First подход на SQL Server 2012;остальное генерируется некоторым кодом SQL (ФУНКЦИИ, ВЫЧИСЛЕННЫЕ КОЛОННЫ, ВИДЫ, ИНДЕКСЫ, И Т.Д.).
Теперь мне нужно было использовать ObjectContext
и одновременно оптимизировать производительность поэтому я создал несколько SQL Views непосредственно в БД, которые в основном выполняют некоторые вычисления (подсчет, смешивание, сумма и т. д.) для уже сгенерированных таблиц CF.
Я хотел бы использовать вышеупомянутые «внешние» представления SQL внутри моего решения, возможно, указывая на такую же строку подключения моего контекста CF и используя тот же репозиторий, который я создал.Мне удалось создать ADO.NET EDM для Views (это правильный подход?), Так что теперь у меня есть Entity Model, сгенерированная из db.По причинам, описанным выше, вначале я использовал существующее соединение для передачи данных и решил не сохранять дополнительную строку соединения внутри моего web.config.
Теперь у меня есть edmx
, содержащий мой Model
и мои Model.Store
из "внешних" взглядов.Например, вот выдержка из mymodel.Designer.cs , которая кажется стандартной, которую я видел в других edmx других проектов:
public partial class Entities : ObjectContext
{
#region Constructors
/// <summary>
/// Initializes a new Entities object using the connection string found in the 'Entities' section of the application configuration file.
/// </summary>
public Entities() : base("name=Entities", "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new Entities object.
/// </summary>
public Entities(string connectionString) : base(connectionString, "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
/// <summary>
/// Initialize a new Entities object.
/// </summary>
public Entities(EntityConnection connection) : base(connection, "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
#endregion
.............
Я бы хотелзапросить «внешние» объекты.Я сделал несколько тестов, но мне не удалось.Не могли бы вы сказать мне правильный подход к проблеме, пожалуйста?
1) Это один из тестов, которые я сделал.В этом случае я получаю исключение «Указанное именованное соединение либо не найдено в конфигурации, либо не предназначено для использования с поставщиком EntityClient, либо недопустимо»:
public class TManagerRepository : ITManagerRepository, IDisposable
{
private TManagerContext context; // the context pointing to CF entities
private TManager.Models.Entities.SQL_Views.Entities entities; // the context pointing to the SQL views by the EDM
public TManagerRepository(TManagerContext context)
{
this.context = context;
this.entities = new TManager.Models.Entities.SQL_Views.Entities();
var test = (from d in this.entities.myview
select d);
}
2) Затем я попыталсяустановить конкретное соединение, но я получаю исключение, которое говорит: «Не удалось найти концептуальную модель для проверки».
Большое спасибо за вашу драгоценную помощь!
С наилучшими пожеланиями