2014-11-25 2 views
0

Мой проект имеет несколько Areas, которые каждый из них имеет свои собственные объекты, и я стараюсь держать все изолирования в этой области ... (позволяет называть эти области = plugins)
DbContextDbSet вне класса DbContext

public class PortalDbContext : DbContext, IUnitOfWork 
{ 
    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class 
    { 
     return base.Set<TEntity>(); 
    } 
} 

IUnitOfWork

public interface IUnitOfWork 
    { 
     int SaveChanges(); 
     IDbSet<TEntity> Set<TEntity>() where TEntity : class; 
    } 

Service.cs

public class PageService : IPage 
{ 
    public readonly IUnitOfWork _uow; 
    public readonly IDbSet<Pages> _page; 

    public PageService(IUnitOfWork uow) 
    { 
     _uow = uow; 
     _page = uow.Set<Pages>(); 
    } 
} 

Наконец Когда я пытаюсь:

public void AddPage(PageModel m) 
{ 
    _page.Add(m); 
} 

Я получаю эту ошибку: The entity type Pages is not part of the model for the current context
это означает, что uow.Set<Pages>(); не работает должным образом.
возможно ли DbSet из DbContext класс - это код ASP.Net MVC?

+0

Вы должны иметь некоторые конкретные конкретные свойства 'DbSet ' в вашем контексте, в противном случае он не знает, как отображать ваши объекты в базе данных. Ваш интерфейс 'IUnitOfWork' на самом деле не имеет большого смысла для меня, какова его цель? –

+0

слишком плохо, вы знаете, я хотел иметь простую подключаемую архитектуру. В этом случае я должен изменить DbContext для каждого плагина. что 'IUnitOfWork' делает' context.SaveChanges() 'и' context.Set (); ' – mhesabi

ответ

0

На самом деле, это сообщение об ошибке

The entity type Pages is not part of the model for the current context

означает, что тип PageModel не был настроен в качестве типа объекта для экземпляра PortalDbContext контекста. Вы должны либо следовать правилам построения вашей модели (см. Страницу this, параграф «Тип открытия»), либо создать модель вручную, используя fluent API.

Второй сценарий подходит для динамических моделей для приложений на основе плагинов, поскольку вы можете обнаружить типы моделей, используя собственный алгоритм, и вызвать методы DbModelBuilder для «сборки» модели.

is it possible to DbSet out of DbContext class is ASP.Net MVC code first?

Короче говоря, вы не можете использовать DbSet<TEntity> без DbContext.
Рассмотрите DbSet как часть контекста (AFAIK, DbSet содержит ссылку на DbContext, которая использовалась для создания DbSet).

Поскольку ASP.NET относится к апатриду, обычный подход заключается в создании экземпляра DbContext (или его унифицированной рабочей оболочки), выполнения действия, удаления контекста и его выброса. Удержание ссылок на DbContext/DbSet как состояние в веб-приложениях не менее бесполезно.

+0

Могу ли я иметь dbcontext без dbset и инициализировать этот dbcontext? – ManirajSS

+0

@ManirajSS: если вы имеете в виду «без' DbSet 'свойства на всех», то да, вы можете. Но для использования этого контекста вы должны переопределить 'OnModelCreating' и построить внутри него модель. – Dennis

+0

Спасибо. Но я знаю «OnModelCreating». Мне нужна база данных без каких-либо таблиц (без 'dbset' и no' onmodelcreating') – ManirajSS

Смежные вопросы