- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Entity Framework - 存储库模式。 (Asp.net C#, EF4)
我为每个数据库表创建存储库。但是当我加入表时,会发生错误
“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用。”
为了避免错误信息,我把所有的都放在一个类中,像这样:
public class WebOrderRepository
{
private DbEntities context = new DbEntities(); //Web.config <add name="DBEntities" connectionString=" ...
public IQueryable<WEBORDERHD> WebOrderHds
{
get { return context.WEBORDERHDs; }
}
public IQueryable<WEBORDERLN> WebOrderLns
{
get { return context.WEBORDERLNs; }
}
}
你能检查一下我的代码吗?
这是我的存储库类,
public class Repository : IDisposable
{
protected ShkAdsEntities context;
private bool _disposed;
public Repository()
{
context = new ShkAdsEntities();
}
public void Dispose() //If define this class as Static then, 'Dispose': cannot declare instance members in a static class
{
DisposeObject(true);
GC.SuppressFinalize(this);
}
~Repository()
{
DisposeObject(false);
}
private void DisposeObject(bool disposing)
{
if (_disposed)
{
return;
}
if(disposing){
if (context != null)
{
context.Dispose();
}
_disposed = true;
}
}
}
public class WebOrderHdRepository : Repository
{
public IQueryable<WEBORDERHD> WebOrderHds
{
get { return context.WEBORDERHDs; }
}
public void Create(WEBORDERHD obj)
{
}
public void Delete(WEBORDERHD ojb)
{
}
public void SubmitChanges()
{
context.SaveChanges();
}
}
public class WebOrderLnRepository : Repository
{
public IQueryable<WEBORDERLN> WebOrderLns
{
get { return context.WEBORDERLNs; }
}
public void Create(WEBORDERLN obj)
{
}
public void Delete(WEBORDERLN ojb)
{
}
public void SubmitChanges()
{
context.SaveChanges();
}
}
这是测试 Controller ,
[HttpGet]
public ActionResult repositoryTest()
{
WebOrderHdRepository webOrderHdRepository = new WebOrderHdRepository();
WebOrderLnRepository webOrderLnRepository = new WebOrderLnRepository();
var result = (from x in webOrderHdRepository.WebOrderHds
join u in webOrderLnRepository.WebOrderLns on x.OrderNo equals u.OrderNo
select new {x.OrderNo}).SingleOrDefault();
return Content(result.OrderNo);
}
我尝试将上下文定义为静态的,
protected static ShkAdsEntities context = null;
public Repository()
{
if (context == null)
{
context = new ShkAdsEntities();
}
}
然后,另一个错误发生了,
Sequence contains more than one element
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Sequence contains more than one element
Source Error:
Line 116: {
Line 117: WebOrderHdRepository webOrderHdRepository = new WebOrderHdRepository();
Line 118: WebOrderLnRepository webOrderLnRepository = new WebOrderLnRepository(); <== ERROR POINT
Line 119:
Line 120: var result = (from x in webOrderHdRepository.WebOrderHds
我搜索了很多 Entity Framework -存储库模式。但大多数事情都非常复杂。所以我想让它像上面一样简单。
请多多指教~
谢谢!
[编辑]
我试试这个,
using(WebOrderHdRepository webOrderHdRepository = new WebOrderHdRepository())
using (WebOrderLnRepository webOrderLnRepository = new WebOrderLnRepository())
{
.
.
但是发生错误,
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ObjectDisposedException: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Source Error:
Line 114: {
Line 115: using(WebOrderHdRepository webOrderHdRepository = new WebOrderHdRepository())
Line 116: using (WebOrderLnRepository webOrderLnRepository = new WebOrderLnRepository())
Line 117: {
Line 118:
我认为它尝试处理两次,但我不知道如何修复代码...
有知道的请指教~
谢谢
最佳答案
您将能够将异常追溯到这条语句:
var result = (from x in webOrderHdRepository.WebOrderHds
join u in webOrderLnRepository.WebOrderLns on x.OrderNo equals u.OrderNo
select new {x.OrderNo}).SingleOrDefault();
故障发生在SingleOrDefault
- 你的收藏有不止一个结果。查看 MSDN 文档以确定您是否应该使用 FirstOrDefault
相反。
特别是关于 SingleOrDefault
行为,MSDN 解释(强调):
Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.
关于您的 DbContext,您应该能够拥有单独的存储库,只需确保每个存储库使用相同的上下文对象即可。我猜想(没有看到原始实现)每个存储库都实例化了它自己的上下文对象。我没有看到您当前的实现有任何特殊问题,尽管有些人可能会提出类似以下内容(未测试):
public ActionResult repositoryTest() {
ActionResult actionRes = default(ActionResult);
using (ShkAdsEntities context = new ShkAdsEntities())
using (WebOrderHdRepository webOrderHdRepository = new WebOrderHdRepository(context))
using (WebOrderLnRepository webOrderLnRepository = new WebOrderLnRepository(context)) {
var result = (from x in webOrderHdRepository.WebOrderHds
join u in webOrderLnRepository.WebOrderLns on x.OrderNo equals u.OrderNo
select new { x.OrderNo }).SingleOrDefault();
actionRes = Content(result.OrderNo);
}
return actionRes;
}
更新:
如果您尝试我上面演示的存储库测试,您将需要进行一些重构。它不适用于您类(class)的当前状态。这将是您需要发布的另一个问题。上面的代码片段只是您的查询可能的一个例子。正如@Florim Maxhuni 所建议的那样,依赖注入(inject) (DI) 确实是可行的方法……仅取决于您的要求和时间限制。如果您的 DbContext 有问题,那将是一个不同的问题,应该在新线程中发布。 :)
关于c# - Entity Framework ,存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484757/
我有这些实体(这只是我为这篇文章创建的抽象): 语言 区 说明 这些是它们之间的引用: 区 * - 1 语言 说明 * - 1 语言 区 1 - 1 说明 如果我这样取: var myFetch =
经过大量谷歌搜索后,除了降级 hibernate 版本之外,我没有找到问题的答案。但我在 2003 年类似的帖子中遇到了这种情况。 问题是什么: //in the first session I d
我听说过 linq to entities 。 Entity Framework 是利用linq to entities吗? 最佳答案 LINQ to Entities 是 Entity Framew
我是 Entity Framework 和 ASP.Net MVC 的新手,主要从教程中学习,对任何一个都没有深入了解。 (我确实有 .Net 2.0、ADO.Net 和 WebForms 方面的经验
如果我编写 LINQ to Entities 查询,该查询是否会转换为提供程序理解的 native 查询(即 SqlClient)? 或者 它是否会转换为实体 SQL,然后 Entity Framew
这个问题已经有答案了: EF: Include with where clause [duplicate] (5 个回答) 已关闭 2 年前。 看来我无法从数据库中获取父级及其子级的子集。 例如...
我开始在一家新公司工作,我必须在一个旧项目上使用 C++ 工作。所以,我忘记了一些 C++ 本身的代码结构。在一个函数中,我在一个函数中有双冒号::,但我不知道如何理解它。 例如,我知道如果我有 EN
我写了一个方法来允许为 orderby 子句传递一个表达式,但我遇到了这个问题。 Unable to cast the type 'System.DateTime' to type 'System.I
简单的问题:LINQ to Entities 和 Entity Framework 有什么区别?到目前为止,我认为这两个名称是用来描述同一个查询的,但我开始觉得事实并非如此。 最佳答案 Entity
我想使用 Entity Framework 。但是,我还要求允许我的用户在我们的系统中定义自定义字段。我想仍然使用 Entity Framework ,而不是使用具有哈希表属性的分部类。 下面是我想到
我正在阅读这个 E.F. 团队博客的这个系列 http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-featu
我正在使用 EF6 开发插件应用程序,代码优先。 我有一个名为 User 的实体的主要上下文。 : public class MainDataContext : DbContext { pub
当我得到最后的 .edmx 时,我遇到了问题。 我收到一条消息说 错误 11007:未映射实体类型“pl_Micro”。 查看设计器 View ,我确实看到该表确实存在。 我怎样才能克服这个消息? 最
我已阅读与使用 Entity Framework 时在 Linq to Entities (.NET 3.5) 中实现等效的 LEFT OUTER JOIN 相关的所有帖子,但尚未找到解决以下问题的方
使用 WCF RIA 服务和 Entity Framework 4. 我有 3 个 DTO:学校、州、区。 州 DTO 有一个地区属性(property),其构成。学校 DTO 有一个国家属性(pro
我有一个 Employee 实体,它继承自一个继承自 Resource 实体(Employee -> Person -> Resource)的 Person 实体。是否可以通过编程方式获取 Emplo
我有一个使用 JPA 的 java 应用程序。 假设我有一个名为 Product 的实体与 name和 price属性(所有实体都有一个 id 属性)。 自然我可以得到一个List相当容易(来自查询或
我有一个 Entity Framework 类,其中有两个指向另一个对象的引用 public class Review { [Key] public int Id {get;s
我是 Symfony 2 的新手,我想知道一些事情: 假设我的项目中有 2 个 bundle 。我想在两个包中使用从我的数据库生成的实体。 我应该在哪里生成实体? (对我来说,最好的方法是在 bund
我想在具有方法和属性的部分类中扩展 EF 实体。我经常这样做。 但是现在我需要将来自该实体的数据与来自其他实体的数据结合起来。因此,我需要能够访问实体 objectcontext(如果附加)来进行这些
我是一名优秀的程序员,十分优秀!