- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否可以使用 EF Core FromSql 执行具有可选参数的存储过程?
我一直在测试一个简单的场景,用作将旧的 EF6 调用更新为 EF Core 调用的模板。我用作概念证明的测试示例:
CREATE PROCEDURE [dbo].[TestNullableParameters]
@addressId int = null,
@city nvarchar(100) = null,
@createdByUserId int
AS
BEGIN
select * from CRM..Address a
where (@addressId is null or a.AddressId = @addressId)
and (@city is null or a.City like @city)
and a.CreatedByUserId = @createdByUserId
END
我调用这个过程的测试代码:
[Test]
public void TestNullableParameters()
{
var procName = "exec CRM..TestNullableParameters ";
var context = _testContainer.Resolve<CRM2Context>();
var addressId = new SqlParameter("@addressId", 182);
var createdByUserId = new SqlParameter("@createdByUserId", 1620);
var parameters = new[] {addressId, createdByUserId};
var result = context.Address.FromSql(procName, parameters).ToList();
}
此代码不起作用,因为它声明该过程需要“@createdByUserId”,但未提供——它尝试将 createdByUserId 映射到@city,然后没有值映射到@createdByUserId。
如果我尝试定义值为 null 的参数 @city,它会声明该过程需要 @city 的非空值。
如果我尝试显式添加仅包含@addressId 和@createdByUserId 的参数列表,它会声明它缺少不可为空的@city。
最佳答案
为了跳过可选参数,你应该使用命名参数语法
@parameterName = parameterValue
如 Specifying Parameter Names 中所述SQL Server 文档中用于执行存储过程的部分。
一旦你这样做了,就根本不需要处理 DBNull
和 SqlParameter
- 你可以使用 FromSql
重载接受C# 插入字符串并让 EF Core 为您创建参数。
这样调用SP的示例代码可以简化为:
var result = context.Address.FromSql(
$"exec CRM.TestNullableParameters @addressId = {201}, @createdByUserId = {1620}")
.ToList();
关于c# - EF Core FromSql 的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53213667/
我正在尝试在 mac os webapi 上使用 asp.net core 2.1 调用 View 或存储过程。 using System; using System.Linq; using Auth
我无法解决这个问题,我感到很沮丧。我想对数据库中的某个人进行基本搜索,以下内容运行良好 IQueryable dbresult = db.vwSomeView.FromSql("select * f
我将 Diesel 与 Postgres 一起使用,并希望将 text 字段查询为 *const str。柴油有实现FromSql for *const str . 文档描述: The returne
我有 dbContext.Items.FromSql("SELECT COUNT(*) FROM Items
错误信息很清楚: 'The required column 'CustomerId' was not present in the results of a 'FromSql' operation'
我想知道除了构建一个包装器来模拟 FromSql 之外还有什么方法吗? ?我知道这个方法是静态的,但是因为他们添加了类似 AddEntityFrameworkInMemoryDatabase 的东西对
我正在尝试从 Locations 表中获取列表并排除已分配给用户的 Locations。我正在尝试使用 Linq FromSQL。如果我硬编码 user.Id 参数查询有效,当我使用 user.Id
我正在使用 EF Core 3.0 将数据从 SQL Server 存储过程提取到名为 Recipient 的对象模型中。 Recipient 模型定义了几个属性,EnvelopeId 和 Name,
是否可以使用 EF Core FromSql 执行具有可选参数的存储过程? 我一直在测试一个简单的场景,用作将旧的 EF6 调用更新为 EF Core 调用的模板。我用作概念证明的测试示例: CREA
我刚刚开始使用 EF7 学习 MVC6。我有一个存储过程,我想返回模型中的一部分字段。如果我没有返回模型中的每个字段,我会得到“‘FromSql’操作的结果中不存在所需的列‘FirstName’”。
我写信是为了用 InMemory 数据库测试 FromSql 语句。我们正在尝试使用 Sqlite。 运行下面的Sql通过单元测试没有报错。 select * from dbo.Product 但是,
我想并行执行几个 SELECT 存储过程调用。 我设置我的上下文如下: public virtual DbSet> CaseGetCaseContextData { get; set; } 我的 re
我在使用 FromSql 时遇到了一个主要问题,就是这样: 我有一个这样的模型: public partial class model { public string name } 我想从数
public List GetPostsByCompanyId(int id, int s, int d, int p) { string command = @"select Id,Titl
我正在尝试使用 Entity Framework 7 中的新 FromSql 命令返回一个值。如果一切顺利,我的存储过程返回值 0,如果发生错误,则返回 1。 将 FromSql 与 DbSet 结合
我在PostgreSQL中写了一个插入函数如下: CREATE OR REPLACE FUNCTION public.insert_blog("Url" character) RETURNS vo
假设我有以下类(class): public class Person { public int Id { get; set; } public string Name { get;
我有一个整数列表: var ids = 新列表 { 10, 20 }; 我需要找到具有该 ID 的用户: context.Users.FromSqlInterpolated($@" select
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在使用 dot net core 创建 WebApi 我创建了从 2 个表返回数据的过程 AS:- select * from table1 select * from table2 我的型号列表
我是一名优秀的程序员,十分优秀!