背景
从jQuery 1.9开始,该.attr(..)方法不再返回属性值,而是我们现在必须使用.prop(..).不幸的是,这也适用于通过属性选择器指定的属性$("input[value=]")
见 http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-
和之间的差异的好,所以讨论.attr和.prop:
我的情况
我目前正在使用选择器,$("input[value=]")以及$("select[value=]")
选择没有值集的输入元素.但是,这不再适用于jQuery 1.9,而是我现在正在做这样的事情:
var hasValue = function () { return !!($(this).val().length); };
var hasNoValue = function () { return !($(this).val().length); };
$("input").filter(hasValue);
$("select").filter(hasValue);
Run Code Online (Sandbox Code Playgroud)
我的实际选择器有点大,检查有或没有值的多个元素,所以现在我不得不将我的1选择器字符串拆分成多个选择器,中间使用.filter(..)方法调用.
题
是否有一个相当于$("[value=]"),$("[value!=]"),$("[value='abc']")它使用属性,而不是属性的?如果没有,有没有比使用.filter(hasValue)和.filter(hasNoValue)方法更清洁的方法?
谢谢
这比实际问题更能解决/解决问题.我在这里发帖,因为我在堆栈溢出时找不到这个解决方案,或者确实经过很多谷歌搜索.
问题:
我首先使用EF 4代码创建一个MVC 3 webapp,我想编写单元测试.我也在使用NCrunch来代码运行单元测试,所以我想避免在这里支持实际的数据库.
其他方案:
IDataContext
我发现这是创建内存datacontext最常用的方法.它实际上涉及为MyDataContext编写接口IMyDataContext,然后在所有控制器中使用该接口.这样做的一个例子是在这里.
这是我最初使用的路线,我甚至编写了一个T4模板,从MyDataContext中提取IMyDataContext,因为我不喜欢维护重复的相关代码.
但是我很快发现在使用IMyDataContext而不是MyDataContext时,一些Linq语句在生产中失败了.特别是像这样的查询会抛出NotSupportedException
var siteList = from iSite in MyDataContext.Sites
let iMaxPageImpression = (from iPage in MyDataContext.Pages where iSite.SiteId == iPage.SiteId select iPage.AvgMonthlyImpressions).Max()
select new { Site = iSite, MaxImpressions = iMaxPageImpression };
Run Code Online (Sandbox Code Playgroud)
我的解决方案
这其实很简单.我只是创建一个MyInMemoryDataContext子类到MyDataContext并覆盖所有IDbSet <..>属性,如下所示:
public class InMemoryDataContext : MyDataContext, IObjectContextAdapter
{
/// <summary>Whether SaveChanges() was called on the DataContext</summary>
public bool SaveChangesWasCalled { get; private set; }
public InMemoryDataContext()
{
InitializeDataContextProperties();
SaveChangesWasCalled = false;
}
/// <summary>
/// …Run Code Online (Sandbox Code Playgroud) 很简单,我首先使用Entity Framework 4.1代码,我想用modelBuilder上的流畅调用替换我的[ForeignKey(..)]属性.类似于下面的WithRequired(..)和HasForeignKey(..)的东西,它将显式外键属性(CreatedBySessionId)与关联的导航属性(CreatedBySession)绑定在一起.但我想这样做是为了一对一的关系,而不是一对一:
modelBuilder.Entity<..>().HasMany(..).WithRequired(x => x.CreatedBySession).HasForeignKey(x => x.CreatedBySessionId)
Run Code Online (Sandbox Code Playgroud)
下面是一个更具体的例子.这与[ForeignKey(..)]属性非常愉快,但我想废除它并纯粹在modelbuilder上配置它.
public class VendorApplication
{
public int VendorApplicationId { get; set; }
public int CreatedBySessionId { get; set; }
public virtual Session CreatedBySession { get; set; }
}
public class Session
{
public int SessionId { get; set; }
[ForeignKey("CurrentApplication")]
public int? CurrentApplicationId { get; set; }
public virtual VendorApplication CurrentApplication { get; set; }
public virtual ICollection<VendorApplication> Applications { get; set; }
}
public class MyDataContext: DbContext
{
public IDbSet<VendorApplication> Applications …Run Code Online (Sandbox Code Playgroud) entity-framework one-to-one code-first ef-code-first entity-framework-4.1