似乎每个人都知道你应该明确区分GUI,业务逻辑和数据访问.我最近和一位吹嘘自己总是拥有干净数据访问层的程序员交谈过.我查看了这段代码,结果发现他的数据访问层只是一个包含一些SQL方法的小类(比如ExecuteNonQuery和ExecuteReader).事实证明,在他的ASP.NET代码页面后面,他有大量的SQL硬编码到page_load和其他事件中.但他发誓他正在使用数据访问层.
所以,我把问题抛出去了.您将如何定义数据访问层?
几年后我又回到了.NET开发阶段,现在看来,特别是对于LINQ,您访问数据的方式已经改变并变得更加容易.例如,在ASP.NET MVC网站中,我可以:
这看起来很棒,但它是如何真实世界的?
我如何理解这个领域的所有新技术,例如
LINQ-to-Entities是否像LINQ-to-SQL一样工作,即自动生成的类,但只有更多的选项?
现在我们有LINQ,ADO.NET的DataTables和DataSets是一项老技术吗?LINQ-to-ADO.NET有意义吗?
Azure在哪里适合您甚至不再拥有RDBMS的地方
现在我们有很多选择,如果您可以为项目选择任何这些技术,您会选择哪个以及为什么?
我们正在研究使用ORM,我想要一些意见/比较
我们对ORM的基本标准是:易于使用/配置(简短的学习曲线),灵活,能够将其抽象出来,易于维护
以下列出了我们正在查看的ORM以及我们的初步印象
这是我们已经查看并排除的ORM
我正在使用一个分层架构,将实体框架作为我的数据层,顶部有一堆存储库,其中包含Linq-To-Entities查询.数据层是一个项目,旁边是我有一个服务层和接口,这是一个网站.
我希望我的网站负责为我的实体模型指定连接字符串.我该怎么做呢?
我使用单例方法到达我的实体存储库,该存储库位于数据层内.
谢谢
我正在开始一个新项目并创建业务对象和数据访问等.我只是使用普通的旧clr对象而不是任何orms.我创建了两个类库:1)Business Objects - 保存我的所有业务对象,所有这些对象都很轻,只有属性和业务规则.2)存储库 - 这是我所有的数据访问.
我的大多数对象都有子列表,我的问题是延迟加载这些值的最佳方法是什么,因为如果我不需要,我不想带回不必要的信息.
我已经考虑过在子属性上使用"get"来检查它是否为"null",以及是否调用我的存储库来获取子信息.从我所看到的这有两个问题:1)对象"知道"如何获得自己我宁愿不在对象中保存数据访问逻辑.2)这需要两个类相互引用,在visual studio中引发循环依赖性错误.
有没有人对如何克服这个问题或我的项目布局的任何建议以及可以改进的地方有任何建议?
谢谢
我有以下数据访问层(DAL).我想知道它是否设置正确,或者我是否需要改进它?
public class User
{
}
//Persistence methods
static class UserDataAccess
{
UsersDAL udal = // Choose SQL or FileSystem DAL impl.
InsertUser(User u)
{
// Custom logic , is 'u' valid etc.
udal.Insert(u);
}
}
abstract class UsersDAL
{
GetUserByID();
InsertUser(u);
...
}
// implementaitons of DAL
static class UsersSQLStore : UsersDAL
{
}
static class UsersFileSystemStore : UsersDAL
{
}
Run Code Online (Sandbox Code Playgroud)
我将存储层与User类分开,以访问方法集合,进一步调用任何自定义DAL.
是使用static在DAL执行是否正确?
请建议更正或我可以做得更好的方法.我在分层编写代码方面没有太多经验.
在Web应用程序中,一个工作单元负责事务管理.
但是Windows应用程序怎么样?
据我所知,存储库是我的数据访问层和业务层之间的连接器.它隐藏了我的业务层中的所有数据访问内容.
使用这个事实让我想到将所有事务内容放入存储库.
但我读到在存储库上使用Commit/RollBack方法违反了存储库的意图.
我问自己谁负责非Web应用程序中的事务管理,如何从业务层隐藏事务/ Nhibernate的东西?
在SQL Server Management Studio中执行脚本时,通常会生成显示在消息窗口中的消息.例如,在运行数据库备份时:
处理率为10%.
处理率为20%.
等等...
为数据库'Sample'处理了1722608页,在文件1上处理了'Sampe'文件.
100%处理.
为数据库'Sample'处理了1页,在文件1上处理了'Sample_Log'文件.
BACKUP DATABASE在202.985秒(66.299 MB /秒)内成功处理了1722609页.
我希望能够在针对数据库运行SQL脚本的C#应用程序中显示这些消息.但是,我无法弄清楚如何在生成SQL时从SQL输出消息.有人知道怎么做这个吗?我必须使用哪个连接框架并不重要.我对LINQ,NHibernate,Entity Framework,ADO.Net,企业库比较熟悉,并且很乐意学习新的.
每比特一点,我是不成熟的,并且对ASP.NET MVC4越来越熟练.但是,我仍然没有在这个非常重要的问题上清楚地表明这一点.让我们说我有一个模型:
public class WorkPaper
{
public int WorkPaperID { get; set; }
public string name { get; set; }
public string description {get ; set; }
public bool verified {get; set;}
public DateTime dateAdded {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我使用此模型与实体框架代码第一种方法,我有以下数据库上下文:
public class NicodemeContext : DbContext
{
public DbSet<WorkPaper> Workpapers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是:什么是模型层以及什么是数据访问层.对我来说,WorkPaper类往往是DAL的一部分,因为我设计它并选择我的属性名称和类型(导航属性等...)以适应EF模式.但问题是,如果我是对的,我真的不知道应该把业务逻辑放在哪里.
在这种特定情况下,如果我想添加一条规则,说明如果尚未经过验证就无法发送工作文件,而另一条规则说如果超过2周之前已添加工作文件则无法提交(奇怪的规则)但那只是一个例子).我应该在哪里添加它们?我是否必须创建另一个类,但是我应该把它放在哪里以及它应该包含什么?对于我已经拥有的课程,这不是很多余吗?但另一方面,由于该类是"面向数据库",在那里添加业务规则不是很麻烦吗?
我的观点是真正理解我必须放置业务逻辑并理解DAL和模型之间的区别.我很难识别DAL和模型层,因为它们看起来与我非常相似.我想以正确的方式做事.
(基本上,我不知道在哪里用MVC编写"我的程序"!一旦我想编写我真正感兴趣的功能,我就不舒服了.我觉得我做的不对)
这是一个呐喊,因为我过去几天一直在学习.NET,这个过程让我有点困惑而不是开悟.就像一个背景信息,我有PHP的知识(甚至使用CakePHP很容易创建一个完整的应用程序)和Rails.
我想知道我是应该追求ASP.NET还是应该坚持学习ASP.NET MVC?虽然我正在阅读ASP.NET的一些教程,但基础知识似乎相当简单,但不知何故,当我所经历的每个示例都将SQL语句直接添加到没有DAL的示例中时,我只是有点担心.
所以,如果我没有做任何好的研究,是否有任何书籍/网站可以帮助解决这个问题?或者我应该去学习.NET MVC?
如果你想知道为什么我不坚持使用PHP或Rails,我只是了解到我可能只需要知道一点.NET以确保我的工作安全.
c# ×7
.net ×3
architecture ×1
asp.net ×1
asp.net-mvc ×1
data-access ×1
linq ×1
nhibernate ×1
orm ×1
repository ×1
sql-server ×1
ssms ×1
transactions ×1