小编Ace*_*ban的帖子

SELECT*不返回所有行,除非我ORDER BY id DESC

应用程序显示"序列包含多个实体"错误.知道这通常是Linq中.SingleOrDefault()命令的结果,我开始调查.我可以验证生产服务器有多个重复关键字的实例,这就是我开始的地方.

我有以下关键字表:

  • id INT(NOT NULL,PRIMARY KEY)
  • 文字NVARCHAR(512)
  • 有效的INT

如果需要打击我,活动只是一种"启用/禁用"数据的方法.我正在使用LINQ to SQL并实现以下方法:

public Keyword GetKeyword(String keywordText)
{
    return db.Keywords.SingleOrDefault(k => (k.text.ToUpper() == keywordText.ToUpper()));
}
Run Code Online (Sandbox Code Playgroud)

我的想法是通过关联表附加关键字,以便多个对象可以引用相同的关键字.关键字表中不应有重复的文本条目.这不是在数据库上强制执行,而是通过代码强制执行.这可能不是最佳做法,但这是我目前遇到的最少问题.所以当我创建我的对象时,我这样做:

Keyword keyword = GetKeyword(keywordText)
if(keyword == null)
{
    keyword = new Keyword();
    keyword.text = keywordText;
    keyword.active = Globals.ACTIVE;
    db.Keywords.InsertOnSubmit(keyword);
}
KeywordReference reference = new KeywordReference();
reference.keywordId = keyword.id;
myObject.KeywordReferences.Add(reference);
db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

这个代码实际上是释义的,我使用了一个存储库模式,所以所有相关的代码都会更长.但是,我可以向您保证代码正在按预期工作,因为我已对其进行了广泛测试.问题似乎发生在数据库级别.

所以我在我的测试数据库上运行了一些测试和手动查询,发现我在测试中传递的关键字不在数据库中,但是如果我做了JOIN,我看到它是.所以我深入挖掘并选择手动扫描整个列表:

SELECT * FROM Keyword
Run Code Online (Sandbox Code Playgroud)

返回737结果.我决定不想全部查看它们,所以我按文字排序并获得737结果.我寻找我最近添加的单词,它没有显示在列表中.

困惑,我查找与我最近工作的对象关联的所有keywordIds,并查看一些id超过1,000(id设置为自动增量1).知道我从来没有真正删除一个关键字(因此是"活动"列)所以从1到至少那些超​​过1,000的数字的所有ID都应该存在,我做另一个查询:

SELECT * FROM Keyword ORDER BY id
Run Code Online (Sandbox Code Playgroud)

返回737结果,最大ID停在737.所以我尝试:

SELECT * FROM Keyword ORDER BY id DESC
Run Code Online (Sandbox Code Playgroud)

返回1308行

如果没有主键或没有唯一标识符,我之前看到过这样的差异,但我确认id列实际上都是.我不确定从哪里开始,我现在还有另外一个问题,即生产中大约有4,000多个关键字是重复的,还有几个引用不同实例的对象.

c# sql linq sql-server-2008-r2

5
推荐指数
1
解决办法
1095
查看次数

jquery 1.9 .ajax()数据类型默认改变了吗?

给定ajax调用,例如:

$.ajax(
{
    url:"MyWebService.blah",
    data: {"data":"awesome"},
    success : function(responseText)
    {
       var myJsonObj = $.parseJSON(responseText);
       //do stuff with myJsonObj
    }
});
Run Code Online (Sandbox Code Playgroud)

这工作正常.我今天将jQuery更新为1.9(我在1.6上暂时)作为Safari的一个可能的修复突然不支持各种切换功能(不再支持eventLayer.X),现在我所有的ajax调用都抛出了以下javascript错误:

Uncaught Syntax Error: Unexpected token o
Run Code Online (Sandbox Code Playgroud)

经过一些研究和一些测试后,我发现上面代码中的"responseText"现在是一个JSON对象,而不是一个字符串.所以这个错误是有道理的,但我试图绕过这个.jQuery真的改变了默认的返回类型吗?我检查了文档:

http://api.jquery.com/jQuery.ajax/
Run Code Online (Sandbox Code Playgroud)

和dataType默认为"智能猜测".我可以看到这可能是多么方便,但我也不喜欢它.

所以这是我的问题:

  1. 这是jQuery的一个新的(ish)变化吗?
  2. 这样做的版本是1.9,还是以前是这样的,我是一个使用1.6的化石?
  3. 有什么建议可以解决这个问题并提出一些"面向未来"的代码?

这是一个非常根本的变化,会影响很多代码.我将浏览我的代码并删除将我返回的数据解析为JSON的任何实例,但这一切都有点令人不安.我错误地指定了dataType?我认为强制执行dataType而不是依赖于默认值是一个好习惯,但是......哇.我是独自一人,或者说jQuery的变化有点冒昧?

string jquery json return-type

5
推荐指数
1
解决办法
2196
查看次数

$(document).ready() 在准备好之前执行?

考虑我正在运行的简化版本:

<html>
   <head>
      <script src="data.js"></script>
      <script src="content.js"></script>
   </head>
   <body>
      <div id="contentGoesHere"></div>
   </body>
</html>
Run Code Online (Sandbox Code Playgroud)

显然还有更多内容,但这是基本要点。在 content.js 中,我有几个函数可以根据 data.js 中包含的 json 数据将标记加载到我的 div 中。除了这些功能之外,还有以下几行:

$(document).ready(function()
{
    loadContent();
});
Run Code Online (Sandbox Code Playgroud)

出于所有意图和目的,加载内容加载得很好,但在该代码中调用执行 jquery .show() 在几个 div 中的第一个 div,这些 div 在它们都附加到容器元素后加载。该代码没有执行,几乎就好像 div 还不存在一样。所以我尝试延迟加载:

<html>
   <head>
      <script src="data.js"></script>
   </head>
   <body>
      <div id="contentGoesHere"></div>
   </body>
   <script src="content.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)

果然,两者都会导致显示第一个面板。如果 .ready() 应该等到 DOM 加载完毕,为什么延迟加载包含 $(document).ready() 函数的文件会有所不同?

jquery document-ready

4
推荐指数
1
解决办法
2116
查看次数