任何人都可以建议一个简单的数据访问层(C#.NET)?不热衷于使用Microsoft应用程序数据访问块,似乎非常臃肿和矫枉过正.出于各种原因也不想使用LINQ to SQL.我想以此为基础并再次出于各种原因创建我们自己的内部ORM.在过去,我总是已经建立了数据访问层,因此从未参与构建....
我知道现在有很多可以使用的现成东西,但如果你想完全控制数据库请求/查询,以及最佳性能,我认为这是要走的路.另外因为ADO.NET为SqlConnection自动连接池,你怎么看?
我曾经在模型本身编写数据访问功能.现在我想将数据访问与业务逻辑分开.我使用codeigniter作为框架.似乎这样做的一种方法是使用ORM,但我猜它会有性能损失.
有没有一般的最佳做法?
我们有一个用Delphi 7编写的客户端/服务器应用程序,带有Firebird后端数据库.该代码最初是以数据访问层开始的,但很快就分解为表单中的数据访问和分散在项目中的不同单元.
我们希望在不久的将来转移到.NET,在我看来,最好的起点是首先在.NET中移动DAL并使用当前的Delphi应用程序来实现它.然后我们可以进一步移植业务层,最后是UI.
因此,我正在寻找其他开发人员关于某些技术/框架的一些想法,以便将DAL转移到.NET中.我的第一个想法是创建一些Web服务.我们的想法是将当前的客户端/服务器应用程序移动到.NET.我们可以在以后与多层设计,Web应用程序进行对战.也许正确的答案是从头开始?
任何想法或想法将不胜感激.
我目前正在研究创建新应用程序的几个选项,可以通过封闭内联网中的多个用户使用浏览器进行访问.
我考虑过将Silverlight用于其用户友好性和WPF设计,以便与未来用户习惯的富客户端保持一致.
该项目(当然)也需要访问内部网内的数据库,因此我浏览了互联网以了解如何处理数据访问.我很惊讶地看到,你显然必须使用Web服务与数据交互,如提及本SO后指向本教程(的许多方法来使用WebServices的一个).
已经在Intranet中创建了所有与数据库交互的富客户端,我很惊讶被迫使用Web服务.
的确,我确实了解网络服务的优势; 它提供的安全性,以及通常在软件架构中创建良好DAL的所有其他功能.但是,我不明白为什么你不能简单地创建(例如)包含Linq to SQL类的库,并使用这个库作为silverlight项目中的参考来直接访问数据,就像使用经典富客户端应用程序一样.我知道通过这样做,您将访问数据存储在应用程序的连接字符串中,但我不明白为什么它不适用于Silverlight客户端.
更新:
那么,有两个问题:
在基于分层架构的Delphi中是否有用于数据访问的框架或代码生成器?
和同事有分歧,而我此时并不关心谁是对的,我更好奇哪个是更好的解决方案,以便我可以继续使用它.
我们有不同的方式来访问系统.
选项#1: 使用以下代码创建数据库.
using Microsoft.Practices.EnterpriseLibrary.Data;
namespace Ivans.Healthcare.CommercialAccess.Data
{
public abstract class DataAccess : DataHelperBase
{
public const int commandTimeout = 7200;
private static Database m_db = null;
public StringBuilder Status {get; set;}
public DataAccess()
{
this.Status = new StringBuilder();
if (m_db == null)
{
bool bIfRunsOnWebService = false;
try
{
if (DynamicConfigurationManager.AppSettings["WebService"] != null)
{
bIfRunsOnWebService = true;
}
}
catch {}
if (!bIfRunsOnWebService)
{
m_db = DatabaseFactory.CreateDatabase(DataAccessResource.IDS_DB_ALIAS);
}
else
{
m_db = CreateDatabase(DataAccessResource.IDS_WS_DB_ALIAS);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后每次需要调用存储过程时,该方法将包含如下内容:
public …Run Code Online (Sandbox Code Playgroud) 我正在研究本地SQL Server 2012实例上的数据库,并计划在本地测试/使用后将其迁移到Azure..NET数据访问层代码有多个catch {}块,但我还想在数据库超出其最大大小时捕获错误.什么是确切的错误引发的类型,以及捕获它的最明智的方法是什么?如果发生这种情况,我会向管理员发送电子邮件.
谢谢.
我正在编写mmorpg服务器模拟器(业余爱好项目),我已停止编写数据访问层.问题是我不能使用ORM(性能问题).我已经阅读了很多关于Repository模式的信息,但它似乎不适合我的项目,因为我需要的方法如:(player db)GetAllByLevel(...),GetByName(...)等.我希望我的应用程序与数据库无关.(我现在正在使用sql server但是我想稍后添加对mysql的支持)哪种数据访问模式适合我的项目?
对不起,我的英语不好.
还有一个问题.我已经读过,存储库模式在agreggate根目录上运行.我有3个桌面玩家,player_friend和player_chest.播放器是一个agreggate root,如果我没错,我应该创建一个可以拥有以下方法的存储库(PlayerRepository):GetFriends([player id],...),GetChest([player id],...)等等.我对吗?
我看到了大量带有实体框架的MVC DAL的例子,但ADO.NET和存储过程没有什么?用于创建DAL的"存储库"模式和"单元工作"似乎有一种趋势,类似于:
http://www.codeproject.com/Articles/207820/The-Repository-Pattern-with-EF-code-first-Dependen
如何将此代码库从EF迁移到ADO.net存储过程?
c# ×4
.net ×2
delphi ×2
ado.net ×1
asp.net ×1
azure ×1
codeigniter ×1
coding-style ×1
orm ×1
php ×1
silverlight ×1
sql-server ×1
web-services ×1