ASP.NET MVC с моделью в отдельной сборке - PullRequest
3 голосов
/ 09 ноября 2009

В настоящее время у меня есть решение .NET, которое я разрабатываю и которое включает несколько подпроектов, в том числе проект ASP.NET MVC. Моя модель была разделена на отдельную сборку, потому что мне нужно использовать ее из различных других проектов в решении.

Моя модель состоит из модели сущностей ADO.NET Entity Framework. Я решил пойти с одноэлементным шаблоном для моей модели со следующим кодом (SalsaEntities является названием моей модели сущности):

partial class SalsaEntities
{
    private static SalsaEntities _instance = new SalsaEntities();

    /// <summary>
    /// Singleton instance of SalsaEntities.
    /// </summary>
    public static SalsaEntities Instance
    {
        get
        {
            return _instance;
        }
    }
}

Затем я использую SalsaEntities.Instance из других моих сборок. Это прекрасно работает в третьем проекте, который я имею, - Служба Windows, хотя мне пришлось включить строку подключения в файл App.Config этого проекта.

Однако я получаю исключение, когда пытаюсь использовать SalsaEntities.Instance из моего проекта ASP.NET MVC. Несмотря на включение следующего в файлы Web.config как в корне проекта, так и в каталоге Views ...

<connectionStrings>
  <add name="SalsaEntities" connectionString="metadata=res://*/SalsaModel.csdl|res://*/SalsaModel.ssdl|res://*/SalsaModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=DbSalsa;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

... У меня все еще выбрасывается следующее исключение:

Указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либо недействительно.

Все сборки имеют разные пространства имен, но, поскольку служба Windows обращается к ней просто отлично, я не думаю, что это проблема.

Помощь

Спасибо, David

P.S .: Еще одна странная особенность, которую я заметил, заключается в том, что при указании Visual Studio создать новый строго типизированный вид он генерирует ошибку «файл не найден» в отношении сборки модели. Я видел, как эта ошибка обсуждалась несколько раз в Интернете без разрешения.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Я не уверен, что здесь происходит, но Миша Н. задает хороший вопрос.

Однако я действительно считаю, что вам следует пересмотреть шаблон Singleton (по крайней мере, для приложения MVC).

С течением времени ваш ObjectContext будет содержать все больше и больше объектов и в результате будет замедляться. См. этот совет , чтобы узнать, почему.

Alex

1 голос
/ 03 декабря 2010

Одноэлементный шаблон не подходит для приложений на основе ASP.NET, вам нужно переключиться на что-то вроде шаблона репозитория, при котором вы управляете ObjectContext на уровне запросов ASP.NET. Есть несколько статей, которые обсуждают это:

Вы можете начать здесь, если хотите: http://www.ef -faq.org / objectcontext.html

Надеюсь, это поможет ..

...