这里有一点LinqToSql GOTCHA:
// Returns the number of counties in a state,
// or all counties in the USA if the state is null
public static int CountCounties(State s) {
var q =
from cy in County.GetTable() // my method to get the ITable
where (s == null || s.Code == cy.StateCode) // shortcut OR operator, right...?
select cy;
return q.Count();
}
Run Code Online (Sandbox Code Playgroud)
猜猜看 - 如果你将null State对象传递给这个方法,你会得到一个空引用异常!似乎LinqToSql不使用||快捷操作符作为快捷方式!
答案可归功于为此提出最佳解释和解决方法的人.
我有一个表Document,由大量其他表通过外键引用.我正在尝试删除文档记录,并根据我的执行计划,SQL Server正在对每个引用表执行聚簇索引扫描.这非常痛苦.
我以为让FK自动在FK字段上做一个索引?还是我错了?我是否真的必须绕过我的数据库,在每个FK字段上放置一个显式索引?
我是一名.NET专家,与PHP/Flash程序员合作,通过IIS提供应用程序.在一场可怕的战斗中跳过了17次篝火并击败了石像鬼,我设法让我的IIS 7.5服务器与PHP合作,现在如果你浏览我的公共网站,你可以愉快地看到Flash对象无论可能是什么,用PHP做他们的幕后工作.
但是......当我使用VS开发服务器调试我的应用程序时,显然仍然不知道如何应对PHP:我得到了与IIS相同的HTTP 405(方法不允许)错误在前面提到的gargoyle呼吸它的最后一个("用于访问路径的HTTP动词POST'/php/blah.php'是不允许的.").
那么,你需要做些什么来让VS Dev服务器与PHP一起玩呢?
我有一个.NET方法,用于对字符串进行DES加密:
public static string EncryptTripleDES(string value, byte[] encryptionKey, byte[] initializationVector) {
if (!value.IsNullOrEmpty()) {
TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(encryptionKey, initializationVector), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cs);
sw.Write(value);
sw.Flush();
cs.FlushFinalBlock();
ms.Flush();
//convert back to a string
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
} else {
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,该算法采用2个参数 - "加密密钥"和"初始化向量".
现在我需要用Java编写DES加密/解密函数,与此函数并行,这样如果你提供相同的加密密钥和初始化向量,你将能够用Java解密用C#加密的东西.(关于Java工作服,自上次使用Java以来大约10年的时间,以及Java中用于DES加密的Googles ......)
在这里找到了一个不错的Java DES加密方法.但是 - 哦,亲爱的,事实证明这个算法坚持一个正好8个字节的初始化向量; .NET代码使用24字节的init向量!
怎么办?为什么Java坚持使用8字节的init向量?我如何解密使用24字节初始向量加密的内容?
如果你在Linq查询中添加"和"条件,那么很容易就这样做:
var q = MyTable;
if (condition1)
q = q.Where(t => t.Field1 == value1);
if (condition2)
q = q.Where(t => t.Field2 > t.Field3);
// etc.
Run Code Online (Sandbox Code Playgroud)
当你想添加"或"条件时,有没有聪明的方法做同样的事情?
我的Java技能有点生疏,但这真的很奇怪:我java.lang.NoSuchMethodError在运行时调用另一个类中的方法 - 请注意代码编译正常 - 另一个类包含在与调用方法相同的JAR中!
这似乎表明它不是类路径问题 - 但那又是什么?
验证后我的登录代码:
var authTicket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false,
roles,
"/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)
并且,感谢Darin Dimitrov,我有一个自定义的Authorize属性:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class TJAuthorize : AuthorizeAttribute {
public override void OnAuthorization(AuthorizationContext filterContext) {
string cookieName = FormsAuthentication.FormsCookieName;
if (!filterContext.HttpContext.User.Identity.IsAuthenticated ||
filterContext.HttpContext.Request.Cookies == null || filterContext.HttpContext.Request.Cookies[cookieName] == null) {
HandleUnauthorizedRequest(filterContext);
return;
}
var authCookie = filterContext.HttpContext.Request.Cookies[cookieName];
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(',');
var userIdentity = …Run Code Online (Sandbox Code Playgroud) 这个问题并不是要找到一个解决方案,而是要解释我从SQL Server中看到过的奇怪行为.
我有一个带有以下签名的存储过程:
alter procedure MySP @param1 uniqueidentifier,
@param2 uniqueidentifier,
@param3 uniqueidentifier
Run Code Online (Sandbox Code Playgroud)
给定一组参数,这个过程需要很长时间才能从C#(使用SqlCommand.ExecuteReader())运行 - 大约2分钟.在直接查询会话中使用相同的参数,SP在2秒内运行.
花了很长时间,我甚至不会试图解释我们如何偶然发现这个解决方案,但这就是我们所做的:
在SP的开头,我们声明了3个局部变量并将它们分配给参数的值,如下所示:
declare @param1_copy uniqueidentifier,
@param2_copy uniqueidentifier,
@param3_copy uniqueidentifier
select @param1_copy = @param1,
@param2_copy = @param2,
@param3_copy = @param3
Run Code Online (Sandbox Code Playgroud)
然后,在SP的其余部分,我们用本地副本替换对输入参数的所有引用.
瞧.SP在2秒内执行.这里的团队非常棒.
现在,女士们,先生们,任何人都可以解释这种行为吗?
由于EF的这个小怪癖,我有一个令人沮丧的情况.这是一个简单的行为演示.首先是数据库架构:

如您所见,RestrictedProduct是产品的一个特例,我打算Product用一些特殊的代码创建一个子类.
现在我导入到EF数据模型:

哎呀!EF看到RestrictedProduct只有2个字段,都是FK,所以它将它映射为Product和之间的一对多关系Restriction.所以我回到数据库并添加一个Dummy字段RestrictedProduct,现在我的EF模型看起来好多了:

但那个Dummy领域是愚蠢而毫无意义的.也许我可以删除它?我从数据库表和实体模型中删除了该字段,然后从数据库刷新模型...

不好了!该Product-Restriction协会以新名称(RestrictedProduct1)返回!另外,它不会编译:
错误3034:从行(x,y)开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行.确保这两个映射片段将AssociationSet的两端映射到相应的列.
有没有办法防止这种行为,没有将Dummy字段保留在RestrictedProduct桌面上?
c# ×5
asp.net ×2
asp.net-mvc ×2
java ×2
linq ×2
air ×1
classloader ×1
cryptography ×1
encryption ×1
foreign-keys ×1
iis ×1
linq-to-sql ×1
php ×1
sql-server ×1