【问题标题】:Entity Framework creates wrong model from stored procedure实体框架从存储过程中创建了错误的模型
【发布时间】:2018-01-29 13:04:36
【问题描述】:

我有一个像这样的存储过程“GET_PARTNER”:

SELECT
...
Partners.name AS 'name'  -nvarchar
Partners.city AS 'city'  -nvarchar
NULL AS 'sales'          -money
NULL AS 'comments'       -nvarchar
...

我已将实体框架 6 添加到项目中,并将其设置为从数据库创建模型,它会创建一个模型“GET_PARTNER_Result”,如下所示:

    //------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WSExport.Model
{
using System;

public partial class GET_PARTNER_Result
{
   public string name {get; set;}
   public string city {get; set;}
   public Nullable<int> sales {get; set;}    -wrong datatype
   public Nullable<int> comments {get; set;} -wrong datatype
}
}

如何修改存储过程,或者是否可以配置 ef 以便创建具有正确数据类型的模型? 像这样:

public Nullable<decimal> sales {get; set;}
public string comments {get; set;}

【问题讨论】:

    标签: c# sql-server entity-framework tsql stored-procedures


    【解决方案1】:

    默认NULLINT 数据类型。使用CAST

    SELECT
    ...
    Partners.name AS name                       --nvarchar
    ,Partners.city AS city                      --nvarchar
    ,CAST(NULL AS MONEY) AS sales               --money
    ,CAST(NULL AS NVARCHAR(1000)) AS comments   --nvarchar
    

    元数据快速检查:

    SELECT name, system_type_name
    FROM sys.dm_exec_describe_first_result_set(N'SELECT NULL AS c', NULL, 0)
    

    Rextester DEMO

    您还可以使用以下方法检查整个存储过程的元数据:

    SELECT name, system_type_name
    FROM sys.dm_exec_describe_first_result_set(N'EXEC GET_PARTNER params..', NULL, 0)
    

    【讨论】:

    • 第二次转换时缺少 CAST,但 OP 应该能够弄清楚。点赞。 :)
    • @CralDasProblem 谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多