0

我有一个正在做的项目。我决定将实体框架与 DBContext 生成器一起使用(以具有不感知对象的持久性),但我现在遇到了一些问题。

这是我设置解决方案的方式:

解决方案:
- MyProject(我的 Web 应用程序项目)
- BusinessObjects(项目)包含 myproject.tt 文件,其中包含所有对象(实体)。每一个都在单独的 .cs 文件中。
- DataAccess(项目)包含 myproject.edmx、myproject.Context.tt 文件

这是我的问题:(我对这一切都很陌生)

假设我有对象(实体)作业,我想在这个对象上定义选择、插入、更新和删除方法。我在哪里做呢?我尝试在 BusinessObjects 项目中创建文件夹 Custom(我将在其中放置所有自定义项)。然后,我想在那里定义我的方法,但我不知道如何创建 ctx(上下文)对象的新实例。

这是我的代码:

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 在我的网络项目中是可见的,我可以从那里使用它。

任何帮助表示赞赏。

4

1 回答 1

2

我不建议您扩展模型的部分类。如果您熟悉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();
    }
} 
于 2011-12-13T01:03:22.213 回答