Я пытаюсь реализовать шаблон репозитория, используя код структуры сущностей сначала rc 1. Проблема, с которой я сталкиваюсь, заключается в создании DbContext. У меня есть контейнер ioc, разрешающий IRepository, и у него есть contextprovider, который просто сообщает новый DbContext со строкой соединения в файле windsor.config. С linq2sql эта часть не была проблемой, но EF, кажется, задыхается. Я опишу проблему ниже на примере. Я вытащил код, чтобы немного упростить вещи, поэтому вы не видите здесь никаких шаблонов репозитория. просто сорта, что происходит без всего лишнего кода и классов.
using (var context = new PlssContext())
{
var x = context.Set<User>();
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
}
using (var context2 = new DbContext(@"Data Source=.\SQLEXPRESS;Initial Catalog=PLSS.Models.PlssContext;Integrated Security=True;MultipleActiveResultSets=True"))
{
var x = context2.Set<User>();
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
}
PlssContext - это место, где я создаю свой класс DbContext. Шаблон репозитория ничего не знает о PlssContext. Лучшее, что я мог сделать, - это создать DbContext со строкой подключения к базе данных sqlexpress и запросить данные таким образом. Строка подключения в var context2 была извлечена из контекста после обновления объекта PlssContext. Поэтому они указывают на одну и ту же базу данных sqlexpress.
Первый запрос работает. Второй запрос терпит неудачу с этой ошибкой:
Модель, поддерживающая 'DbContext'
контекст изменился, так как база данных
был создан. Либо вручную
удалить / обновить базу данных или позвонить
Database.SetInitializer с
Экземпляр IDatabaseInitializer. За
Например,
DropCreateDatabaseIfModelChanges
Стратегия автоматически удалит и
воссоздать базу данных и, при необходимости,
заполнить его новыми данными.
в этой строке
var y = x.Where(u => u.UserName == LogOnModel.UserName).FirstOrDefault();
Вот мой DbContext
namespace PLSS.Models
{
public class PlssContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Corner> Corners { get; set; }
public DbSet<Lookup_County> Lookup_County { get; set; }
public DbSet<Lookup_Accuracy> Lookup_Accuracy { get; set; }
public DbSet<Lookup_MonumentStatus> Lookup_MonumentStatus { get; set; }
public DbSet<Lookup_CoordinateSystem> Lookup_CoordinateSystem { get; set; }
public class Initializer : DropCreateDatabaseAlways<PlssContext>
{
protected override void Seed(PlssContext context)
{
Я перепробовал все стратегии инициализатора с одинаковыми ошибками. Я не думаю, что база данных меняется. Если я удалю
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
Тогда возвращается ошибка
Тип сущности Пользователь не является частью модели для текущего контекста.
Какой вид имеет смысл. Но как вы сводите все это вместе?