Entity framework 如何在实体框架中创建对上下文对象的引用,以及如何使用DBContext对象?
我正在做一个项目。我决定将实体框架与DBContext生成器一起使用(使持久性不受影响的对象),现在我遇到了一些问题 以下是我设置解决方案的方式: 解决方案:Entity framework 如何在实体框架中创建对上下文对象的引用,以及如何使用DBContext对象?,entity-framework,reference,entities,dbcontext,Entity Framework,Reference,Entities,Dbcontext,我正在做一个项目。我决定将实体框架与DBContext生成器一起使用(使持久性不受影响的对象),现在我遇到了一些问题 以下是我设置解决方案的方式: 解决方案: -MyProject(我的web应用程序项目) -BusinessObjects(project)包含myproject.tt文件,其中包含所有对象(实体)。每个都在单独的.cs文件中。 -DataAccess(project)包含myproject.edmx、myproject.Context.tt文件 这是我的问题:(我对这一切都不熟
-MyProject(我的web应用程序项目)
-BusinessObjects(project)包含myproject.tt文件,其中包含所有对象(实体)。每个都在单独的.cs文件中。
-DataAccess(project)包含myproject.edmx、myproject.Context.tt文件 这是我的问题:(我对这一切都不熟悉) 假设我有一个对象(实体)作业,我想在这个对象上定义select、insert、update和delete方法我在哪里做这件事?我尝试在BusinessObjects项目中创建文件夹自定义(我将在其中放置所有自定义内容)。然后,我想在那里定义我的方法,但我不知道如何创建ctx(上下文)对象的新实例 这是我的密码:
namespace BusinessObjects
{
public partial class Job
{
public Job GetJob(Guid Id) {
using (var ctx = new BestGigEntities())
}
return null; //for now
}
}
}
我得到的错误消息是,名称空间中不存在BestGigEntities。
BestGigEntities应该存在于BusinessObjects中,但当我试图从withing BusinessObject项目访问它时,不知何故它是不可见的。但我可以从我的主要网络项目中看到它。
在myproject.Context.tt中,我将BusinessObjects指定为自定义工具命名空间。为什么我看不见
我已经检查了myproject.Context.cs文件,可以看到
public partial class BestGigEntities : DbContext
{
public BestGigEntities()
: base("name=BestGigEntities")
{
. ...
一切似乎都很好。我几乎可以肯定我正确地添加了所有引用。我在想也许我试图在错误的地方定义这些方法
从我的web项目中可以看到这些实体,我可以从那里使用它们
非常感谢您的帮助。我不建议您扩展模型的部分类。如果你熟悉并使用它会更好
描述了一些类,如服务和助手。他们可能会提示您从何处开始使项目更加结构化
至于积垢的操作,在最简单的情况下
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();
}
}
BestGigEntities应该在BusinessObjects名称空间中,因为它显然不在名称空间中,它在什么名称空间中?是的。它位于BusinessObjects命名空间中。Context.cs文件在DataAccess项目中,正如我所说的,DataAccess项目中的tt文件将BusinessObjects指定为自定义工具名称空间,这与它在哪个项目中无关。命名空间在不同的程序集中可以有相同的命名空间,在同一程序集中可以有不同的命名空间。如果它说它不在名称空间中,它就不在名称空间中。我感谢您的评论。我宁愿现在不去MVC。看了一下你给我的链接,(对我来说)这个主题似乎需要一些认真的时间投入。我只是试图将数据和业务对象层从.NETWeb应用程序项目中分离出来。网上有很多这样的例子:我只需要知道我应该把我的CRUD方法放在哪里,对于我目前的架构,我想如果你把所有的CRUD方法加入一个新的服务类中会很方便。您可以使用或创建许多服务类(每个实体一个)。