【问题标题】:EF 6 Code First From Database - Calling existing stored procedureEF 6 Code First From Database - 调用现有的存储过程
【发布时间】:2015-06-24 21:53:27
【问题描述】:

我正在使用 EF 6 连接到现有的 SQL 数据库。我想为一些现有实体和非 CRUD 存储过程生成模型。在 Visual Studio 中,我添加了一个新的“ADO.NET 实体数据模型”,并为模型内容选择了“数据库中的代码优先”。但是,我可以使用的唯一数据库对象是表和视图。存储过程不可用。这是设计使然还是我在这里遗漏了什么?

【问题讨论】:

    标签: c# sql-server entity-framework entity-framework-6


    【解决方案1】:

    您需要为每个存储过程定义一个 DTO。您只需创建简单的类,其中类的属性名称与存储过程返回的列的名称相匹配。因此,当您从 EF 调用存储过程时,您的对象将被构建和填充。表演很棒! 这里我贴一个例子:

    dbContext.Database.CommandTimeout = 3600;
    List<CarsDTO> objs = dbContext.Database.SqlQuery<CarsDTO>(
             "spGetCars @carMakeId", new SqlParameter("carMakeId", id)
    ).ToList();
    

    【讨论】:

    • 你为什么这么说?您不需要总是指明 SqlDbType。您可以提供参数名称和值(对象)。请记住 int(Int32 的快捷方式)是一个对象。在此处检查 SqlParameter 构造函数:msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多