Как создать ссылку на объект Context в Entity Framework и как работать с объектами DBContext? - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть проект, над которым я работаю.Я решил использовать Entity Framework с генератором DBContext (чтобы иметь постоянные непознанные объекты), и теперь я застрял с некоторыми проблемами.

Вот как я устанавливаю свое решение:

Решение:
- MyProject (мой проект веб-приложения)
- BusinessObjects (проект) содержит файл myproject.tt со всеми объектами (сущностями) внутри.Каждый в отдельном файле .cs.
- DataAccess (проект) содержит файлы myproject.edmx, myproject.Context.tt

Вот мой вопрос: (я новичок во всем этом)

Допустим, у меня есть объект (объект) Job, и я хочу определить методы выбора, вставки, обновления и удаления этого объекта. Где я могу это сделать? Я попытался создать папку Custom (куда я бы поместил все свои настройки) в проекте BusinessObjects.Затем я хотел определить свои методы там, но я не знаю, как создать новый экземпляр объекта ctx (context).

Вот мой код:

namespace BusinessObjects
{
    public partial class Job
    {
        public Job GetJob(Guid Id) {
            using (var ctx = new BestGigEntities())

            }
            return null; //for now
        }
    }
}

Сообщение об ошибкеЯ понимаю, что BestGigEntities не существует в пространстве имен.BestGigEntities должен находиться в BusinessObjects, но почему-то он не виден, когда я пытался получить к нему доступ из проекта BusinessObject.Но я вижу это из моего основного веб-проекта.В myproject.Context.tt у меня BusinessObjects определены как пространство имен пользовательских инструментов.Почему я не вижу этого?

Я проверил свой файл myproject.Context.cs и вижу

    public partial class BestGigEntities : DbContext
    {
        public BestGigEntities()
            : base("name=BestGigEntities")
        {
 . ...

Кажется, все в порядке.Я почти уверен, что добавил все ссылки правильно.Я думаю, может быть, я пытаюсь определить эти методы в неправильном месте?

BestGigEntities видно из моего веб-проекта, и я могу использовать его оттуда.

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 13 декабря 2011

Я бы не рекомендовал вам расширять частичные классы вашей модели. Было бы лучше, если бы вы ознакомились с шаблоном MVVM и использовали его.
Здесь описаны некоторые классы, такие как службы и помощники. Возможно, они могли бы подсказать Вам, с чего начать, чтобы проект стал более структурированным.
Что касается операций CRUD в простейшем случае, это будет выглядеть как

public static Job Get(int jobId)
{
    using (var context = new BestGigEntities())
    {
        return context.Jobs.FirstOrDefault(s => s.Id == jobId);
    }
}

public static void Save(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Jobs.Attach(job);
        context.Entry(job).State = EntityState.Modified;
        context.SaveChanges();
    }
}

public static void Create(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Jobs.Add(job);
        context.SaveChanges();
    }
}

public static void Delete(Job job)
{
    using (var context = new BestGigEntities())
    {
        context.Entry(job).State = EntityState.Deleted;
        context.SaveChanges();
    }
} 
...