pau*_*sim 11 c# entity-framework executestorequery difference
以下有何不同之处
CreateQuery() ExecuteFunction(), ExecuteStoreQuery() and ExecuteStoreCommand()
Run Code Online (Sandbox Code Playgroud)
据我所知,CreateQuery用于Entity SQL,其余的方法用于在DB中定义的sql函数或存储过程.
根据ObjectContext类元数据,它们如下:
CreateQuery():Creates an System.Data.Objects.ObjectQuery<T> in the current object context by using the specified query string.
Returned -> System.Data.Objects.ObjectQuery<T>
ExecuteFunction(): Executes a stored procedure or function that is defined in the data source and expressed in the conceptual model; discards any results returned from
the function; and returns the number of rows affected by the execution.
Returned -> The number of rows affected.
This has an overloaded version which return -> The entity type of the System.Data.Objects.ObjectResult<T>
ExecuteStoreCommand(): Executes an arbitrary command directly against the data source using the existing connection.
Return -> The number of rows affected.
ExecuteStoreQuery(): Executes a query directly against the data source that returns a sequence of typed results.
Return -> An enumeration of objects of type TResult.
Run Code Online (Sandbox Code Playgroud)
根据以上信息 -
Use ExecuteFunction() if you have added db Function/Stored Procedure in your EDMX & can be used for both insert/update & getting result set.
Use ExecuteStoredCommand() if you have not added db Function/Stored Procedure in your EDMX & can be used to insert/update only.
ExecuteStoreQuery() can do what Executefuction() can do except that you no need to add your db Function/Stored Procedure in EDMX & IEnumerable can be used as return type.
Run Code Online (Sandbox Code Playgroud)
如果我错了,请纠正我.任何进一步的信息将受到高度赞赏.
与CreateQuery非常相似,如下所示:
var id = 42;
using(var ctx = new Entities()){
var query = ctx.Companies.Where(o=>o.Id==id);
var result = query.First();
}
Run Code Online (Sandbox Code Playgroud)
在我调用 First() 之前,查询只是一个查询。没有任何内容发送到数据库。仅当询问数据时,才会执行查询并检索数据。
编写 lambda 很容易,但假设您可以为了其他好处而牺牲它。如果 EDMX 不知道您的数据映射,您基本上只能使用ExecuteStoreQuery。前任。您已手动创建映射。
var queryString = "SELECT ... FROM " + tableName;
var table = context.ExecuteStoreQuery<ResultTableTemplate>(queryString );
Run Code Online (Sandbox Code Playgroud)
为应用程序编写代码很好,但有时数据库的寿命比多个用户界面的寿命长。为了最大限度地减少需要完成的工作量,您可以在数据库中存储一些(如果不是全部)功能。它们主要作为函数或过程存储在那里。

ExecuteFunction 仅适用于函数导入。函数是计算值,不能对 SQL Server 执行永久环境更改(即不允许 INSERT 或 UPDATE 语句)。Select Today()在 C# 中调用自定义函数:
var date = ctx.ExecuteFunction<DateTime>("Today").First();
Run Code Online (Sandbox Code Playgroud)
实体框架支持三种加载相关数据的方式——急切加载、延迟加载和显式加载。默认情况下它是延迟加载,这就是为什么你看到我使用.First()/.FirstOrDefault/.ToList/...有关如何根据需要加载数据的更多信息,你可以查看加载相关实体。
过程就像数据库批处理脚本。如果您使用数据库优先设计,那么很可能您的大部分业务逻辑将存储在过程中。你可以在 C# 中这样称呼它们:
var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param";
var @params = new[]{
new SqlParameter("name_param", "Josh"),
new SqlParameter("age_param", 45)
};
ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params);
Run Code Online (Sandbox Code Playgroud)
奖金:
您想要做的一件常见事情是调用接受表值参数的存储过程。
| 归档时间: |
|
| 查看次数: |
7395 次 |
| 最近记录: |