我承认这个问题是主观的,但我对社区的看法很感兴趣.我有一个缓存类,它接受类型的缓存加载器函数Func<TResult>
,它用于从数据库中检索值并将其存储在缓存中.
public static class Cache
{
public TResult Get<TResult>(string cacheKey, Func<TResult> cacheLoader)
{
// Implementation
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该如何命名函数参数?
cacheLoader
?loadResult
?cacheLoadFunction
?(我不喜欢这个.)我对我应该命名这个特定的函数参数不感兴趣,并且对如何命名函数参数更感兴趣.什么说你,Stack Overflow社区?
编辑:我已经更新了示例代码并提供了完整的表和视图实现以供参考,但基本问题仍未改变.
我在数据库中有一个相当复杂的视图,我试图查询.当我尝试通过将WHERE子句硬编码为特定外键值从视图中检索一组行时,视图执行速度非常快,并且具有最佳执行计划(正确使用索引等)
SELECT *
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = 20
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试向查询添加参数时,我的执行计划突然崩溃了.当我运行下面的查询时,我正在获取索引扫描而不是遍布整个地方并且查询性能非常差.
DECLARE @ForeignKeyCol int = 20
SELECT *
FROM dbo.ViewOnBaseTable
WHERE ForeignKeyCol = @ForeignKeyCol
Run Code Online (Sandbox Code Playgroud)
我正在使用SQL Server 2008 R2.什么给这里?使用导致次优计划的参数有什么用?任何帮助将不胜感激.
作为参考,这里是我得到错误的对象定义.
CREATE TABLE [dbo].[BaseTable]
(
[PrimaryKeyCol] [uniqueidentifier] PRIMARY KEY,
[ForeignKeyCol] [int] NULL,
[DataCol] [binary](1000) NOT NULL
)
CREATE NONCLUSTERED INDEX [IX_BaseTable_ForeignKeyCol] ON [dbo].[BaseTable]
(
[ForeignKeyCol] ASC
)
CREATE VIEW [dbo].[ViewOnBaseTable]
AS
SELECT
PrimaryKeyCol,
ForeignKeyCol,
DENSE_RANK() OVER (PARTITION BY ForeignKeyCol ORDER BY PrimaryKeyCol) AS ForeignKeyRank,
DataCol
FROM
dbo.BaseTable
Run Code Online (Sandbox Code Playgroud)
我确定窗口函数是问题,但我通过窗口函数分区的单个值过滤我的查询,所以我希望优化器先过滤然后运行窗口函数.它在硬编码示例中执行此操作,但不是参数化示例.以下是两个查询计划.最佳计划是好的,底层计划是坏的.
也许这是一个可怕的想法,但如果是,那么请告诉我为什么然后假装这是一个学术练习,不会在生产中看到光明.
我想为Angular $ injector服务添加一些逻辑,以监视何时将某些服务注入其他服务.由于Angular似乎提供了一种装饰服务的机制,我认为这将是一种方法.但是,以下代码引发错误.
(function () {
'use strict';
var app = angular.module('app');
app.config(['$provide', function ($provide) {
$provide.decorator('$injector', ['$log', '$delegate', addLoggingToInjector]);
}]);
function addLoggingToInjector($log, $delegate) {
var baseInstantiate = $delegate.instantiate;
var baseInvoke = $delegate.invoke;
$delegate.instantiate = function (type, locals) {
// $log.debug('Calling $injector.instantiate');
baseInstantiate(type, locals);
};
$delegate.invoke = function (fn, self, locals) {
// $log.debug('Calling $injector.invoke');
baseInvoke(fn, self, locals);
};
return $delegate;
};
})();
Run Code Online (Sandbox Code Playgroud)
具体错误是:
未捕获错误:[$ injector:modulerr]由于以下原因无法实例化模块应用程序:错误:[$ injector:unpr]未知提供程序:$ injectorProvider
为什么OAuth将访问令牌和访问令牌机密包含为两个单独的值?作为消费者或OAuth,我看到的所有建议都表明我应该将令牌和秘密存储在一起并基本上将它们视为一个值.
那么为什么规范首先需要两个值呢?
我在实体框架代码优先查询中遇到了一些性能问题,我相信预编译可能就是答案.如果我使用"普通"实体框架,我只需使用CompiledQuery.Compile方法预先查询我的查询.但由于我有一个DbContext而不是ObjectContext,我无法让它工作.
我确实认识到DbContext是一个IObjectContextAdapter,它允许我访问ObjectContext,但我找不到让我从我的预编译查询中运行的对象上下文中获取IQueryable的方法.我试图使用CreateObjectSet,但是当EF试图运行查询时,它抱怨它无法将该方法转换为SQL.
那么针对Code-First DbContext预编译LINQ查询的最佳方法是什么?
我相信这个问题的答案是"不",但我对社区意见感兴趣.varchar或nvarchar值应该自动修剪尾随空格,所以我不相信我应该在这样的值上调用RTRIM().有专家有理由我需要吗?
(如果标签不清楚,我指的是Microsoft SQL Server.)
我有一个Entity Framework Code First DbContext,配置了以下实体.在此示例中,类Bar是Foo类的子类.
public class Foo
{
public Guid Id { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
public Guid Id { get; set; }
public Guid FooId { get; set; }
public virtual Foo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我知道在内部,Entity Framework了解Foo和Bar之间的关系是由外键Bar.FooId定义的.我想做的是在运行时使用表达式以某种方式提取该关系.我想实现一个行为如下的方法:
var context = new FooBarDbContext();
var bar = context.Set<Bar>().First();
// I want this method to return bar.FooId when passed the expression b => b.Foo
object result …
Run Code Online (Sandbox Code Playgroud) 考虑以下SQL:
CREATE TABLE Foo
(
ID int IDENTITY(1,1),
Data nvarchar(max)
)
INSERT INTO Foo (Data)
SELECT TOP 1000 Data
FROM SomeOtherTable
WHERE SomeColumn = @SomeParameter
DECLARE @LastID int
SET @LastID = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以依赖于我插入到具有连续标识值的表Foo中的1000行.换句话说,如果这个SQL块产生的@LastID为2000,我能否确定我插入的第一条记录的ID是1001?我主要是对多个语句同时将记录插入表Foo感到好奇.
我知道我可以在insert语句周围添加一个可序列化的事务来确保我想要的行为,但我真的需要吗?我担心引入可序列化的事务会降低性能,但如果SQL Server在此语句运行时不允许其他语句插入表Foo,那么我不必担心它.
我想处理一些HTML代码并删除标签,如示例中所示:
"<p> <b>这个</ b>是一个非常有趣的段落.</ p>"结果"这是一个非常有趣的段落."
我使用Python作为技术; 你知道我可以用来删除HTML标签的任何框架吗?
谢谢!
我正在构建的ASP.NET应用程序中实现企业库异常处理应用程序块.我打算通过在Global.asax.cs中放置以下代码来处理未捕获的应用程序异常:
protected void Application_Error()
{
Exception error = Server.GetLastError();
Exception errorToThrow;
if (ExceptionPolicy.HandleException(error, "Application Error", out errorToThrow))
{
if (errorToThrow != null)
throw errorToThrow;
}
else
Server.ClearError();
}
Run Code Online (Sandbox Code Playgroud)
我相信这将有助于处理策略的各种后处理操作(None,NotifyRethrow,ThrowNewException),但我想知道是否有人发现此实现存在重大问题.
我看到类似的问题已被提出,但我认为它们中没有一个专门解决我所看到的环境差异.我有一个包含a的ASP.NET Web窗体应用程序,GridView
我手动绑定到实体框架实体的集合.我正在使用一个BoundField
引用我的某个实体的导航属性.
以前的帖子表明这不受支持,但整个解决方案在Windows 7上运行的IIS 7.5中运行良好.但是,当应用程序部署到在Windows Server 2003 R2上运行IIS 6的Web服务器时,它会失败并显示HttpException
:
"在所选数据源上找不到名为'Worker.FullName'的字段或属性."
以下是代码的相关摘要:
实体:
public class WorkerAssignment
{
public Guid Id { get; set; }
public Guid WorkerId { get; set; }
public virtual Worker Worker { get; set; }
}
public class Worker
{
public Guid Id { get; set; }
public string FullName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ASPX:
<asp:GridView
ID="gvWorkers"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="Id"
>
<Columns>
<asp:BoundField
DataField="Worker.FullName"
SortExpression="Worker.FullName"
HeaderText="Worker Name"
/>
</Columns>
</asp:GridView> …
Run Code Online (Sandbox Code Playgroud) sql-server ×3
asp.net ×2
t-sql ×2
angularjs ×1
c# ×1
data-binding ×1
gridview ×1
html-parsing ×1
iis ×1
lambda ×1
oauth ×1
python ×1
sql ×1