我需要优化域实体上的保存(插入查询)生成的查询.我已经使用Fluent NHibernate配置了NHibernate.
这是NHibernate在插入用户对投票的响应时生成的查询:
exec sp_executesql N'INSERT INTO dbo.Response (ModifiedDate, IpAddress, CountryCode,
IsRemoteAddr, PollId) VALUES (@p0, @p1, @p2, @p3, @p4); select SCOPE_IDENTITY()',N'@p0
datetime,@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 bit,@p4 int',
@p0='2001-07-08 03:59:05',@p1=N'127.0.0.1',@p2=N'US',@p3=1,@p4=2
Run Code Online (Sandbox Code Playgroud)
如果观察的输入参数IpAddress和CountryCode,将会注意到,NHibernate的使用nvarchar(4000).问题是,nvarchar(4000)远远大于我需要或者IpAddress或CountryCode并且由于高流量和托管的要求,我需要优化内存使用情况的数据库.
以下是这些列的Fluent NHibernate自动映射覆盖:
mapping.Map(x => x.IpAddress).CustomSqlType("varchar(15)");
mapping.Map(x => x.CountryCode).CustomSqlType("varchar(6)");
Run Code Online (Sandbox Code Playgroud)
这不是我看到不必要的nvarchar(4000)弹出的唯一地方.
如何控制NHibernatenvarchar(4000)对字符串表示的使用?
如何更改此insert语句以使用适当大小的输入参数?
sql-server nhibernate hibernate nhibernate-mapping fluent-nhibernate
好的说我要插入100行,每行有大约150列(我知道这听起来像很多列,但我需要将这些数据存储在一个表中).插入将随机发生(即,每当一组用户决定上传包含数据的文件时),大约每月20次.但是,数据库将在连续加载处理大型企业应用程序的其他功能.列是varchars,int,以及各种其他类型.
将这些插入包装在一个事务中(而不是一次运行一个)的性能提升是巨大的,最小的,还是介于两者之间?
为什么?
编辑:这是为Sql Server 2005,但如果有不同的话,我会对2000/2008感兴趣.另外我应该提一下,我理解交易主要是为了数据一致性,但我想关注性能影响.
我试图弄清楚在C#中命名私有方法和私有静态方法的最聪明方法是什么.
背景:我知道私有成员的最佳做法是下划线前缀+ camelcase.你可以跟我争论这个,但相信我,我已经看到了遵循这个惯例的核心专业人士的足够代码,这是熟练的行业标准.
我也知道pascal案例是公共方法的行业标准.但我已经看到测试样式命名(即method_must_return_false_occasionally)与pascal case,camelcase和underscore-prefix + camelcase的组合,用于私有和私有静态方法.
但是,在C#中私有和私有静态方法命名的最佳实践风格是什么?
如果某些私有方法使用某些样式而不是其他方法,我可以理解,只需解释一下.
谢谢阅读.
我正在重构一个正在结束的项目的代码,最后我把很多业务逻辑放在服务类而不是域对象中.此时,大多数域对象仅是数据容器.我决定在服务对象中编写大部分业务逻辑,然后将所有内容重构为更好,更可重用和更易读的形状.这样我就可以决定应该将哪些代码放入域对象中,以及将哪些代码分解为自己的新对象,以及应该在服务类中保留哪些代码.所以我有一些代码:
public decimal CaculateBatchTotal(VendorApplicationBatch batch)
{
IList<VendorApplication> applications = AppRepo.GetByBatchId(batch.Id);
if (applications == null || applications.Count == 0)
throw new ArgumentException("There were no applications for this batch, that shouldn't be possible");
decimal total = 0m;
foreach (VendorApplication app in applications)
total += app.Amount;
return total;
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎是对域对象的一个很好的补充,因为它只有输入参数才是域对象本身.似乎是一些重构的完美候选人.但唯一的问题是该对象调用另一个对象的存储库.这让我想把它留在服务类中.
我的问题是这样的:
谢谢你的时间.
编辑注意:不能在这个上使用ORM,所以我不能使用延迟加载解决方案.
编辑注2:我不能改变构造函数来接受参数,因为将要使用反射(不是我的想法)实现域对象的方式.
编辑注3:我不相信批处理对象应该只能合计任何应用程序列表,看起来它应该只能处理该特定批处理中的应用程序.否则,将函数保留在服务类中对我来说更有意义.
我听说NHibernate的延迟加载的大部分内容是使用它比使用它更好.似乎最小化数据库访问是有意义的,以减少瓶颈.但很少有事情没有权衡,当然它会通过强迫你拥有virtual属性来略微限制设计.但我也注意到一些开发人员在某些经常使用的对象上关闭了延迟加载.
这让我想知道是否存在使用延迟加载会损害数据访问性能的某些确定情况.
所以我想知道,何时以及在什么情况下我应该避免延迟加载我的一个NHibernate持久化对象?
仅在额外的处理时间内延迟加载的缺点是,还是nhibernate延迟加载也会增加数据访问时间(例如,通过额外的往返数据库)?
谢谢!
我创建了一个工厂和一组规范来创建和验证聚合根.目前我对工厂进行了一些测试,这些测试称工厂的产品规格,但我想知道这是否足够.从设计的角度来看,将工厂与其产品的规格相结合可能会更好,因为它们密切相关.
如果聚合根产品的规范用于验证而不是用于创建,那么从工厂内部调用它是否有意义?
或者单位测试是否足够好?
validation domain-driven-design aggregate specification-pattern factory-pattern
在我正在处理的网络应用程序中,我想做一些小滑动通知,比如在推特或桌面上.jQuery .slideDown完全符合我的要求,但它是颠倒的.在.slideUp不执行了slideDown的颠倒版本.相反,它隐藏了一些东西,比如在你清理了你所显示的旧信息之后slideDown.
那么slideDown()在jQuery中颠倒的最简单的代码是什么?
我需要在iis7上重写规则的正则表达式,我正在尝试将http://www.website.com重定向 到http://www.website.com/sample.但是我只想要空的url字符串(如果你可以用'和'来计算它,那么额外的点数),我不确定如何创建一个与之匹配的重写规则.
有人可以帮帮我吗?
我正在开发一个项目,我们在一个mvc风格的项目上做了很多自定义的javascript,尤其是jquery.
唯一的问题是我不断添加越来越多的全局函数/变量,而且它们正在堆积.我有一些文件,但我不确定如何将一些东西拆分成单独的文件.
我曾考虑将这些函数和全局变量中的一些组合成对象,但javascript中的对象语法对我来说似乎有些尴尬(因为缺少经典类).虽然如果我有一个很好的榜样,也许我可以到处走.
你如何处理全局javascript函数和变量开始堆积的项目?
我有一个带有令牌身份验证的ASP.NET Web Api 2.0项目,所有工作主要完成本文之后:
使用ASP.NET Web API 2,Owin和Identity,Bit Of Technology进行基于令牌的身份验证
但是我很难理解我的Startup.cs中的这行代码究竟是做什么的:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Run Code Online (Sandbox Code Playgroud)
这不会使Web Api将Access-Control-Allow-Origin标头添加到我的API响应中,换句话说,它不会在我的Web Api中启用Cors(仍然试图了解如何执行此操作).它甚至没有将它添加到我的承载令牌认证服务器响应中.我必须将此代码提供给OAuthAuthorizationServerProvider:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
Run Code Online (Sandbox Code Playgroud)
在我的令牌提供者端点响应上启用Cors.
那么这个Microsoft.Owin.Cors中间件的用途是什么呢?因为我到处读到有关Web Api 2.0和Cors的这一行代码
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Run Code Online (Sandbox Code Playgroud)
过来:
c# ×2
jquery ×2
nhibernate ×2
performance ×2
sql-server ×2
aggregate ×1
animation ×1
cors ×1
database ×1
hibernate ×1
iis-7 ×1
javascript ×1
jquery-ui ×1
lazy-loading ×1
object ×1
orm ×1
owin ×1
refactoring ×1
regex ×1
rewrite ×1
service ×1
sql ×1
transactions ×1
url ×1
validation ×1