我正在写一个数据访问层.我对管理系统中的连接感到困惑.我知道.net使用连接池.但我不想在所有dml操作或所有sql查询中打开和关闭数据库连接.我怎么处理这个?何时何地(可能在使用数据访问层或数据访问层的全局asax中)应该管理连接?
我现在正在建立一个小型网站,在那里我写下了出现的问题,并回答了其他问题.目前我正在使用DAL,就像这里描述的那样.现在我一直在研究其他模型,特别是使用Linq2SQL和ADO.net Entries框架的基于linq的模型.我意识到我正在以某种方式将数据访问移动到代码层,因为我当时正在过滤掉例如带有linq查询的toplist.我开始这样做的原因是因为DAL在任何时候都没有真正与DB同步,并且当我在DB中更改某些内容时,可空类型变得不可为空.然后,如果我将表重新导入数据表,我的查询将丢失.
我的简单问题是,如果你今天要为ASP.net提供一个好的DAL,那会是什么?建议,经验非常欢迎.
我有一个关于n层架构的问题.在问这个问题之前,我想了很久很久,因为这里已经有很多类似的问题......然而,经过一天半的时间看着它并阅读其他答案后,我仍然不确定.各种看似相似的术语和不同的方法令我感到困惑.
如果我在不同的类库中有一个BLL和一个DAL,BLL和DAL之间进行通信的一种方法是利用一个接口,有点像在另一个由BLL和DAL引用的单独DLL中定义的DTO.我在BLL中的域模型实体将实现此接口,因此DAL中的任何ORM生成对象也将实现此接口.为了保存我的业务实体,我可以将它们传递给DAL,它可以接受它们,因为它们实现了共享接口.我还可以将对象传递回实现此接口的BLL.这似乎是合理的,因为BLL和DAL只需要知道基本接口,而不是每个其他具体实现.
我的问题是在另一边创建对象的最佳方法是什么?例如,如果我在BLL中实现了一个实现IPerson的Person对象,以及一个PersonDataObject或同样实现IPerson的DLL中的任何东西,我将Person传递给DAL中的一个方法,该方法接受IPerson的参数,然后在DAL I'中d必须重建PersonDataObject才能持久化.这甚至是最好的方法吗?
对不起,我可能没有解释得太好,因为我很困惑.对于假人答案的最佳做法将非常感激.
一个简单的问题.有些情况下,我获取数据,然后在我的BLL中处理它.但我意识到可以在我的存储过程中完成相同的处理/过滤,并将过滤后的结果返回给BLL.
哪个更好,在DB处理或在BLL中处理?为什么?
考虑一下这个场景,我想检查一下产品是否存在于我的数据库中,如果它存在,请将其添加到订单中(以下是Nour Sabony的回答示例)现在我可以在我的BLL上进行检查,或者我在存储过程也是如此.如果我将事物组合到一个过程中,我将整个操作减少到一个db调用.那个更好吗?
我是这个概念数据访问层和数据访问对象的新手.
我想了解数据访问层和数据访问对象之间的区别.请指导我.
我正在尝试重新设计最初使用Raptier构建的数据访问层.Raptier生成接受where子句作为参数传递给存储过程的方法.我真的需要保留现有的mesthos签名,所以我的新DAL也需要接受where子句.我想使用更新的数据访问技术和技术,因此考虑使用.Net 4.0中的Entity Framework.
但是,看起来我不能接受动态where子句而不实现一些强烈的reoutines来将它们解析为lamba表达式.有没有我错过的东西?我是否对实体框架不满意?
谢谢,马克
所有,
在SQL Server中,存储过程(从用户运行)是否可以写入用户无权直接写入表的表?
RGDS,
MK
我熟悉ASP .NET MVC应用程序中用于测试控制器和业务逻辑的技术.
我们的应用程序中的数据访问集中在特殊服务中,这些服务是松散耦合的,使用接口并通过实体框架与实际数据库一起工作.
但是,随着DAL变得越来越复杂,隐藏数据库实现细节并为应用程序代码提供抽象,我们开始关注我们是否能够以任何方式对其进行测试.因为它已经与EF上下文紧密绑定,所以我们不打算引入另一个存储库样式的层,但这也意味着我们不能仅使用伪数据对其进行单元测试.
我想知道是否有可能以某种方式模拟或存根Entity Framework对象上下文,同时能够执行简单的操作,如添加/删除实体和进行查询.
我也在寻找关于它是否是一个好主意(可能非常糟糕)的意见,如果不是,那么一些"智能"数据层测试建议.
我知道数据访问层或简单的DAL用于访问和检索数据库中的信息,但我不知道如何在控制器中调用DAL数据.例如,我在我的DAL中制作了这个静态类,但我不确定如何将它调用到我的控制器,任何帮助或指南都将不胜感激.DohvatiMetodu是该类的名称.
public static FormInputViewModel DohvatiMetodu()
{
var viewModel = new FormInputViewModel();
var metoda = new List<Metoda>();
var metodaList = new List<SelectListItem>();
using (var db = new ApplicationDbContext())
{
metoda = db.Metoda.ToList();
}
foreach (var metod in metoda)
{
metodaList.Add(new SelectListItem() {Value = metod.Id.ToString(), Text = metod.Naziv});
}
viewModel.KoristenaMetoda = metodaList;
return viewModel;
Run Code Online (Sandbox Code Playgroud) bll ×2
c# ×2
data-access ×2
.net ×1
ado.net ×1
architecture ×1
asp.net ×1
java ×1
mocking ×1
n-layer ×1
orm ×1
security ×1
sql-server ×1
unit-testing ×1