我之前一直在使用Microsoft企业库,因为它被标记为抽象数据访问,而不是编写我自己的DAL.最初我只是将一个文件(sqlhelper.cs)导入到我的项目中,但后来的版本要求我引用整个dll,除非我想在删除我想要的功能方面投入大量的工作.
我假设在.NET 4.0发布几个月后将发布新版本的Enterprise Library.我公司对库的使用可能与传统用途不同,我们为许多客户设计和开发Web和Windows应用程序.我们要么将完成的项目交给内部开发人员维护,要么是小型客户端,我们将维护应用程序.
由于业务的性质,我有幸在设计新应用程序时"从头开始"大量时间,而不是与更新相同的代码库相关联.如果我们再次使用Microsoft Enterprise Library,下一个项目我可能会问自己同样的问题吗?我们只使用数据访问块,它似乎在开发过程中节省了时间.与此同时,我想知道通过使用对象添加到项目中的开销和复杂程度是多少.
提前感谢您的建议.
这里的讨论确实让我重新考虑了这个问题 - 它可能不是关于访问存储过程的轻量级抽象,而是关于为什么我们仍然依赖于N-Tier模型的更大的架构问题.
对我来说,如果归结为应用程序中使用的数据库.在经典的3层/ N层世界中,数据库是公司信息的独立存储.不同的应用程序(Web,桌面等)都共享和访问公共存储平台.在这种情况下,存储过程是有意义的,因为它们充当各种应用程序和表之间的抽象层.
对于其他项目,数据库是较大应用程序的独占持久存储.UI或其他类型的访问(包括Web服务,远程处理等)需要通过应用程序的BLL.由于我们业务的性质,这是我们更常开发的方案.
鉴于这个结论,我将创建两个原型项目,一个使用SubSonic,另一个使用LINQ.虽然我担心LINQ的开销和丢失保真度,但是数据访问所需代码的显着减少以及我们开发的项目类型的一致性使其值得一看.
我正在尝试将Unity包添加到我的解决方案中,但我一直收到列出的消息:
试图解决依赖'Unity(≥3.5.1404.0)'.
'Unity'已经为'CommonServiceLocator'定义了依赖关系.
任何想法如何解决这个问题?
我刚刚开始一个项目,因为这个项目是个人的,我想知道使用企业库有什么好处?我们在办公室的几个项目中使用版本2,但我不太确定(除了好的做法)它的优点,特别是在数据库组件中.有什么建议?谢谢
在我的店里,我们目前正在开发我认为的中小型项目.我们一直在调查企业库以及它如何能够帮助我们开发.我特别关注Logging块并将其与Log4Net进行比较.在我看来,企业库块对于简单的应用程序日志记录来说是一个极其过度设计的解决方案.
话虽如此.您使用的是企业库以及规模较大的项目吗?您对企业图书馆整体有何看法?
谢谢
调用具有表值参数作为参数之一的存储过程时,我收到以下错误
EXECUTE对象'ValidationErrors' 的权限被拒绝
ValidationErrors是使用以下语句创建的TVP:
CREATE TYPE [dbo].[ValidationErrors] AS TABLE(
[ErrorMessage] [varchar](255) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
执行存储过程的用户对存储过程具有执行权限.但是,我仍然得到上述错误.有任何想法吗?
这个解决方案有效,到目前为止,非常好.但是,我有更多的需求,而不是这个解决方案为我提供的.我有多个应该登录到不同日志的安装,但我希望它们的名称在事件查看器中是合乎逻辑且直观的.但是,Windows事件系统不能有两个类别,其中名称中的前8个字符相同.类别名称可以更长,但只有前8个字母用于区分它们.如果发生这种情况,.Net实际上会输出警告:
只有自定义日志名称的前八个字符才有意义,并且系统上已经有另一个日志使用给定名称的前八个字符.
目前我不得不求助于密码前缀,但是我仍然面临着多次安装在regrads中相互"碰撞"到logname的危险,所以我需要一个更好的解决方案.
但是,在我的计算机上的事件查看器中,我可以看到还有层次结构的日志名称 - 这正是我需要的.微软和思科显然都找到了这样做的方法:

但是,如何为日志记录创建这样的层次结构,每个应用程序可能安装多次?像这样:
CompanyName
ApplicationName
Installation1
Installation2
Run Code Online (Sandbox Code Playgroud) 自从微软推出应用程序块以来,我一直在碰到使用异常处理应用程序块的人.我最近对自己进行了仔细研究,并总结了如下基本功能(如果您已经知道它的作用,请跳过以下块):
异常处理应用程序块旨在集中并使配置文件完全配置以下关键异常处理任务:
- 记录异常
- 替换例外
- 包装例外
- 传播例外
- 等等
该库通过修改try catch块来实现,如下所示:
Run Code Online (Sandbox Code Playgroud)try { // Run code. } catch(DataAccessException ex) { bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy"); if (rethrow) { throw; } }根据app.config中为策略名称指定的内容(请参阅此处的文档),HandleException将...
- 抛出一个全新的异常(替换原来的异常)
- 将原始异常包装在一个新异常中并抛出它
- 吞下异常(即什么都不做)
- 你有没有重新抛出原来的例外
此外,您还可以将其配置为预先执行更多操作(例如,记录异常).
现在这是我的问题:我完全没有看到如何替换,包装,吞下或重新抛出异常使其可配置是多么有益.根据我的经验,这个决定必须在您编写代码时做出,因为在更改异常处理行为时,您通常必须更改周围或调用代码.
例如,当您重新配置时,您的代码可能会开始行为不正确,以至于现在吞下特定点抛出的特定异常而不是重新抛出(可能在发生异常时不能执行catch块之后的代码).对于异常处理中的所有其他可能的更改也是如此(例如,替换 - >重新抛出,吞下 - >换行).
所以,对我来说,底线是异常处理块解决了实际上根本不存在的问题.异常记录和通知位很好,但是并非所有其他东西都只是过度工程的完美示例吗?
.net enterprise-library exception-handling application-blocks
我正在调查.net项目的各种日志记录可能性,我无法在System.Diagnostics.Debug/Trace功能和第三方库(如log4net,MS Enterprise Library,NLog等)之间做出决定.
目前我已经发现了这个:
如果有人能指出我正确的方向或纠正(或添加一些东西)给我上面给出的比较,我将非常感激!也许如果你鼓励我使用第三方,你可以建议一些特定的一方(考虑到我们的应用程序很可能不需要任何花哨的东西,如UDP,滚动文件等 - 只是普通文件,电子邮件,数据库和事件簿)?
提前致谢!
我有以下代码来设置一个参数,该参数将在INSERT语句中用于在SQL Server数据库中设置VARCHAR列.我的值对象(名为ilo)有一个名为Description的属性,它被初始化为String.Empty,然后被设置为从XML读取的某个值,或者如果该XML元素为空,它只保留为String.Empty.
因此,当插入数据库时,如果属性仍然设置为String.Empty,我想让它插入一个空值.
database.AddInParameter(cmd, "@description", DbType.String,
(ilo.Description.Equals(string.Empty)) ?
DBNull.Value :
ilo.Description);
Run Code Online (Sandbox Code Playgroud)
所以基本上我是说,如果ilo.Description等于string.empty,请将参数设置为DBNull.Value,否则将其设置为ilo.Description.
这在Visual Studio中出现以下错误...
错误141无法确定条件表达式的类型,因为'System.DBNull'和'string'之间没有隐式转换
为什么?
奇怪的是,我可以做到以下没有错误,这应该与使用上面的内联条件语法完全相同!?!
if(ilo.Description.Equals(string.Empty))
{
database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}
Run Code Online (Sandbox Code Playgroud)
我搜索了其他帖子,发现了下面的帖子,但它并没有真正回答我的问题.
我对WHY更感兴趣,因为明显的解决方法是使用if/else语句而不是内联(三元)语法?
在这个链接上有一个答案,但我想要一个更好的解释,因为它似乎是我的BS,这不起作用; 我称之为虫子!
我正在使用Microsoft Enterprise库5.0来记录我的.net应用程序.
记录工作正常.但问题是与日志消息一起记录的DateTime不正确.有6.5小时的时差.
我怎么能纠正这个?