实体框架6.1(代码优先)增加了通过添加索引的可能性IndexAttribute.该属性采用一个参数来指定索引应该是群集还是非群集.
同时,AFAIK,Entity Framework要求每个实体都有一个主键(用该注释KeyAttribute),并且该主键始终作为聚簇键创建.
因此,只要我的申请IndexAttribute有IsClustered = true,我得到一个错误,因为由于键时,已经是一个聚集索引.
那么,如何使用IndexAttribute?创建不是主键的聚簇索引?可用的IsClustered属性是IndexAttribute什么?
(有关更多上下文:我正在映射一个仅用于通过LINQ查询进行读取的表.我不需要实际插入,更新或删除该表中的实体.因此,我不需要主键理想情况下,我想要一个没有主键的表,但是有一个非唯一的聚簇索引,专为阅读而优化.)
编辑(2014-04-11):另请参阅https://entityframework.codeplex.com/workitem/2212.
根据https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging,建议的使用方式Microsoft.Extensions.Logging似乎是通过依赖注入ILogger对象.
在依赖注入不起作用(或不能正常工作)的情况下,建议的模式是什么,例如在扩展方法,类型初始值设定项,静态属性和其他传递一个ILogger非常麻烦的静态成员中?
使用log4net(我的团队之前使用过),一个常见的模式是:
public static class SomeExtensions
{
private static readonly ILog s_log = LogManager.GetLogger(typeof(SomeExtensions));
public static void ExtensionMethod (this SomeType someType)
{
s_log.Info("...");
}
}
Run Code Online (Sandbox Code Playgroud)
是否有类似的既定或推荐模式Microsoft.Extensions.Logging?
以下代码给出了编译器错误CS0030(使用VS 2012的C#编译器编译),尽管转换可能在运行时成功.删除sealed关键字,使用as强制转换或添加中间强制转换object会使错误消失.
public interface IFunny<out T> { }
public sealed class Funny<T> : IFunny<T>
{
public IFunny<TOther> Cast<TOther> ()
{
// error CS0030: Cannot convert type Funny<T>' to 'IFunny<TOther>'.
return (IFunny<TOther>) this;
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,编译器只使用密码类的启发式,在通用接口实现的情况下过于严格.
它真的太严格了(在一个错误的意义上),还是有充分的理由发生这个错误?
更新:对我的问题的澄清:编译器无法确定编译时TOther和T编译时是否存在关系.在运行时,如果TOther是相同的或基类,则转换将成功,T并且在所有其他情况下它将失败.无论是否Funny<T>密封,都是如此.
C#编译器通常不会阻止在运行时可能成功的强制转换.(例如,我可以将静态类型的实例转换object为IComparable,如果实例没有真正实现该接口,则会导致运行时异常.)为什么在这种sealed情况下会这样做?
以下屏幕截图显示了一天的 SQL 查询及其消耗的资源量。
如您所见,单个查询虽然有很多,但似乎不会消耗太多资源。
条形图显示了数据 IO 负载的 0.08% 的负载。另一方面,下面的折线图显示了大约 15% 到 25% 的恒定利用率。即使该线是运行平均线,它也与条形图不匹配。下表中的单个查询似乎也不消耗太多资源。
这个开销从哪里来?它只是隐藏内部查询吗?我读错了可视化吗?
我正在为我没有预先提供数据类型信息的表生成T-SQL SELECT语句.在这些语句中,我需要执行依赖于表列原始值长度的字符串操作操作.
一个例子(但不是唯一的例子)是在字符串中的特定位置插入一些文本,包括在末尾插入它的选项:
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
Run Code Online (Sandbox Code Playgroud)
(CASE WHEN + LEN是必需的,因为STUFF不允许我在字符串的末尾插入文本.)
问题是LEN排除了尾随空白,这将破坏计算.我知道我可以使用DATALENGTH,它不排除尾随空格,但是我无法将DATALENGTH返回的字节转换为STUFF所需的字符,因为我不知道Product列是varchar还是nvarchar类型.
那么,如何在没有关于正在使用的字符串数据类型的前期信息的情况下生成依赖于字符串的确切长度的SQL语句?
该GetWindowText函数的返回值被记录如下:
如果函数成功,则返回值是复制字符串的长度(以字符为单位),不包括终止空字符.如果窗口没有标题栏或文本,如果标题栏为空,或者窗口或控件句柄无效,则返回值为零.要获取扩展错误信息,请调用GetLastError.
现在,当调用此方法并接收返回值为零时,我如何知道是否GetLastError会返回合理的值?毕竟,零不仅用于指示失败,还可能意味着窗口文本为空,在这种情况下GetLastError不会返回未定义的值.
我自己的想法:
GetWindowText会在成功时将最后一个错误设置为0.但测试显示它没有(如果确实如此,我无论如何都不能依赖它,因为这没有记录).GetWindowText可能会在成功时保留最后一个错误,因此在调用之前将其设置为0将允许我检查上一个错误是否已更改.测试显示这可能有效,但由于它不是这种方式,我不能依赖它.(我想这在很大程度上取决于具体情况和实施情况GetWindowText.)GetWindowTextLength,然后GetWindowText仅在长度大于0时调用.但是,如果窗口在我的调用GetWindowTextLength和之间更改文本GetWindowText怎么办?我再次不能依赖零表示错误的返回值.那么,我能做些什么才能明确决定是否GetWindowText失败?
我的Razor Layout视图中有以下代码(由我的应用程序中的所有视图共享):
@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = ViewIDs.Shared._AuthenticationPartial.LogoutForm })) {
Run Code Online (Sandbox Code Playgroud)
这与我的家庭和帐户视图一起工作正常,即它呈现了一个发布到〜/ Account/Logout的表单.但是,当与名为"Person"的区域内的视图一起使用时,它会突然发布到〜/ Person/Account/Logout.
现在,我能够解决这个问题如下:
@using (Html.BeginForm("Logout", "Account", new { area = "" }, FormMethod.Post, new { id = ViewIDs.Shared._AuthenticationPartial.LogoutForm })) {
Run Code Online (Sandbox Code Playgroud)
这是否是正确的方法,即根据定义当前区域的默认区域?或者我的应用程序中存在配置问题?
使用PowerShell Remove-Item删除非空目录时,将提示确认:
PS C:\Users\<redacted>\Desktop\Temp> Remove-Item .\Test
Confirm
The item at C:\Users\<redacted>\Desktop\Temp\Test has children and the Recurse parameter was not specified. If you
continue, all children will be removed with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Run Code Online (Sandbox Code Playgroud)
如果我在非交互模式下运行PowerShell,我会收到错误:
Remove-Item : Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.
At line:1 char:1
+ Remove-Item .\Test …Run Code Online (Sandbox Code Playgroud) 我想向我们的团队成员授予使用 Azure SQL 数据库的查询性能洞察功能所需的权限,包括查看长时间运行的查询的查询文本的可能性。
他们已经具有“读者”和“监控贡献者”角色,因此可以访问 Azure 门户中的查询性能洞察功能并查看长时间运行的查询的 ID。但是,当他们单击长时间运行的查询时,他们看不到查询文本。显示错误,指示“运行查询时连接超时”。
如果我为他们分配“SQL DB 贡献者”角色,他们将能够使用该功能,但他们也可以更改数据库设置,例如定价层,这是我不希望的。
是否有满足我需要的角色分配?
c# ×3
azure ×2
asp.net-core ×1
asp.net-mvc ×1
azure-rbac ×1
azure-sql ×1
generics ×1
indexing ×1
logging ×1
nvarchar ×1
powershell ×1
string ×1
t-sql ×1
varchar ×1
winapi ×1
windows ×1