Попытка подключиться к базе данных с помощью ObjectContext, но не удается - PullRequest
1 голос
/ 02 августа 2011

Я играю с POCO в EF, работая от крошечной базовой настройки до чего-то более продвинутого.Нет интерфейсов дженериков, просто точка входа.Прежде всего я создал файл .edmx, содержащий только одну сущность: Person, с 3 атрибутами.Id, FirstName и LastName.

С этим я сгенерировал базу данных и добавил несколько записей в нее вручную.Эта база данных называется «PocoTest», и бит подключения в моем App.Config выглядит следующим образом:

<add name="PocoTestContainer" connectionString="metadata=res://*/PocoTest.csdl|res://*/PocoTest.ssdl|res://*/PocoTest.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SEBASTIAAN-PC\SQLEXPRESS;Initial Catalog=PocoTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Сначала я создал Entity:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Теперь я создал Context, наследуяиз ObjectContext:

public class PocoTestContext : ObjectContext
{
    private IObjectSet<Person> persons;

    public PocoTestContext()
        : base("name=PocoTestContainer", "PocoTestContainer")
    {
        ContextOptions.LazyLoadingEnabled = true;
        persons = CreateObjectSet<Person>();           
    }

    public IObjectSet<Person> Persons
    {
        get
        {
            return persons;
        }
    }
}

Ничего особенного здесь.Следующее - это хранилище:

public class PersonRepository
{
    PocoTestContext context;

    public PersonRepository()
    {
        context = new PocoTestContext();
    }

    public Person GetById(int id)
    {
        return context.Persons.Where(p => p.Id == id).FirstOrDefault();
    }

    public List<Person> GetAll()
    {
        List<Person> persons = null;

        try
        {
            persons = context.Persons.ToList();
        }
        catch(Exception e)
        {
            Console.WriteLine(e.InnerException);
        }
        return persons;
    }

    public void Add(Person entity)
    {
        context.Persons.AddObject(entity);
    }

    public void Save()
    {
        context.SaveChanges();
    }
}

Теперь все это прекрасно скомпилируется, но я не могу подключиться к базе данных, так как я не получаю никаких результатов.Когда я проверяю состояние соединения в конструкторе PocoTestContext, соединение не устанавливается.Теперь я предполагаю, что что-то не так с тем, как я использую строку подключения.Я украл этот подход из другого проекта, в котором я использовал сгенерированный репозиторий.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Я нашел решение, в файле edmx содержалась ссылка на «PersonSet», я вручную изменил это на «Person». Теперь я получаю ожидаемые результаты.

1 голос
/ 02 августа 2011

Соединение не установлено в конструкторе.Он устанавливается, когда он необходим, и закрывается, когда он не нужен.

...