(注意:我的问题与三个月前提出这个问题的人非常相似,但从未得到过回答.)
我最近开始使用MVC3 + Entity Framework,我一直在阅读最佳实践是使用存储库模式集中访问DAL.这也伴随着您希望将DAL与域(尤其是视图层)分开的解释.但是在示例中,我看到存储库(或似乎是)只是返回DAL实体,即在我的情况下,存储库将返回EF实体.
所以我的问题是,如果它只返回DAL实体,那么存储库有什么用呢?这是否会增加一层复杂性,而不会消除在层之间传递DAL实体的问题?如果存储库模式创建"进入DAL的单一入口点",那么它与上下文对象有何不同?如果存储库提供了一种检索和持久化DAL对象的机制,那么它与上下文对象有何不同?
此外,我至少读过一个地方,工作单元模式集中了存储库访问以管理数据上下文对象,但我不知道为什么这也很重要.
我98.8%肯定我在这里遗漏了一些东西,但从我的读数中我没有看到它.当然,我可能只是没有阅读正确的消息来源......:
design-patterns domain-driven-design entity-framework repository-pattern
我正在重写一些结构不好的旧ASP应用程序,并尝试在此过程中学习.NET和MVC3.有两个主要的应用程序,其中一个重用另一个的代码,实际上只是另一个的非常有限的版本.一个向"权力"用户提供有关数据库中任何人的报告.另一个仅针对请求报告的个人提供报告.这些服务器位于不同的服务器上,DMZ中的服务器数量较多,而第二个防火墙服务器数量较多.
我的问题是,由于实际报告对于两者都是相同的,只是参数化为更强大的一个允许它在任何用户上运行,我不想复制和粘贴重用报告生成从一侧到其他.我想制作一些可重复使用的控制器库和视图/局部文件来提供相同的信息,并允许我在一个地方维护它.
这可能与MVC3有关吗?还是有更好的方法?我在这里搜索了一下但没有找到任何关于此的内容,但也许我没有使用正确的术语.
我在使用Razor的VS2010,C#,MVC3.
提前致谢.
对给定任务使用 HtmlHelper 或 Partial 之间是否存在性能差异?
例如,我正在编写一个 HtmlHelper“控件”来在编辑器中创建一个具有以下签名的链接:
public static HtmlString RecordNameLink(
this HtmlHelper htmlHelper,
string linkText,
string editActionName,
object editRouteValues,
string deleteActionName = null,
object deleteRouteValues = null)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编辑按钮将始终显示,删除按钮仅在包含时才会显示。或者,我可以这样做:
@Html.Partial("Controls/RecordNameLink", Model)
Run Code Online (Sandbox Code Playgroud)
(或传递部分特定模型)
但是有没有理由选择一个而不是另一个,特别是一个比另一个有更好的性能吗?(虽然我愿意了解更多关于一般差异的信息)
谢谢。
我有一段T-SQL代码,看起来像这样:
select @automation_rate =
case
when @total_count = 0 then 0
else @automated_count / @total_count
end
Run Code Online (Sandbox Code Playgroud)
@automation_rate是十进制(3,2).@total_count和@automated_count是整数.
不幸的是,为@automation_rate返回的唯一值是0或1.显然这里有一些错误,它可能是非常简单的,但对于我的生活,我看不到它.
底层结果集中的所有数据(我在表上循环)是0或正整数.除自动化率外,所有值均为整数.
这是示例值和预期(使用计算器)与实际结果:
automated count total count expected ratio actual ratio
--------------- ----------- -------------- ------------
0 35 0.0 0.00
98 258 37.98 0.00
74 557 13.29 0.00
140 140 1.00 1.00
Run Code Online (Sandbox Code Playgroud)
如您所见,除了自动=总数之外,所有值的比率均为0.00.我还有一个Excel电子表格,它执行相同的基本计算,每次都是完美的(就像"预期"列一样).
那我哪里出错了?
(这是在MS SQL Server 2005上,关于任何影响的关闭机会)
编辑感谢大家的答案.我假设整数舍入部分,因为它正在移动到它会自动转换的十进制数据类型,而不是意识到它会进行计算,舍入,然后转换.每个人都有类似的答案,所以所有人都赞成.