Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您更喜欢EF4中的ObjectSet还是CreateQuery?_C#_Visual Studio 2010_Entity Framework_Entity Framework 4_Linq To Entities - Fatal编程技术网

C# 您更喜欢EF4中的ObjectSet还是CreateQuery?

C# 您更喜欢EF4中的ObjectSet还是CreateQuery?,c#,visual-studio-2010,entity-framework,entity-framework-4,linq-to-entities,C#,Visual Studio 2010,Entity Framework,Entity Framework 4,Linq To Entities,我一直在下面编码。但我找到了另一种方法和部分。哪一个比另一个好。有什么区别?哪一个性能比另一个好 public T Single(Func<T, bool> predicate) { return _context.CreateQuery<T>("[" + typeof(T).Name + "]").Where(predicate).Single(); } public T Single(Func谓词) { 返回_context.CreateQuery(“[”+

我一直在下面编码。但我找到了另一种方法和部分。哪一个比另一个好。有什么区别?哪一个性能比另一个好

public T Single(Func<T, bool> predicate)
{
    return _context.CreateQuery<T>("[" + typeof(T).Name + "]").Where(predicate).Single();
}
public T Single(Func谓词)
{
返回_context.CreateQuery(“[”+typeof(T).Name+“]”)。其中(谓词).Single();
}
另一种用法

public T Single(Func<T, bool> predicate)
{
    return _objectSet.Single<T>(predicate);
}
public T Single(Func谓词)
{
返回_objectSet.Single(谓词);
}

哪个更喜欢?

我更喜欢使用
IObjectSet
,因为您可以创建一个实现单元测试的
IObjectSet
的伪对象。有关这方面的讨论,请参见和。

它们是完全不同的事物,具有完全不同的目的

ObjectSet
是一个强类型属性,允许您对概念模型运行LINQ查询。(
ctx.Apples.Where(x=>x.Color==“红色”)

CreateQuery
是一种允许您针对物理模型运行原生SQL的方法。也称为EntitySQL。(
从dbo.Apples WHERE Color=“Red”
中选择*)

ObjectSet
更安全,因为模型上的实体作为ObjectSet上的属性公开,而ObjectSet是通过泛型键入的<另一方面,code>CreateQuery也被键入实体,但实际的查询是EntitySQL,一个字符串参数,这意味着可能会因为键入错误而发生运行时错误。使用
ObjectSet
时,您将遇到的唯一运行时错误是特定于CLR的错误(空引用等)或特定于SQL的错误(外键约束、PK冲突等)

正如@adrift还提到的,
IObjectSet
是可模拟的,但是您当然可以为
CreateQuery
创建一个代理/包装类并模拟它


在过去的几个月里,我一直在使用Entity Framework 4.0,但没有发现
CreateQuery
的任何用法。我要么使用
ObjectSet
要么使用存储过程。

在帖子中不需要HTML格式-看到了吗?你担心性能吗?第一位代码甚至不能可靠地工作!