【问题标题】:How to map my stored procedure returned values into my asp.net mvc如何将我的存储过程返回值映射到我的 asp.net mvc
【发布时间】:2014-07-17 16:14:58
【问题描述】:

我创建了以下存储过程,它接受两个参数并搜索两个不同的数据库:-

Use ITSys
Go

CREATE PROCEDURE [dbo].[AdvanceSearch]
        -- Add the parameters for the stored procedure here
        @Name varchar(50) = null,
        @Tag varchar(50) = null
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        -- Insert statements for procedure here
    select t.Tag , r.RESOURCENAME , rs.DESCRIPTION , tt.Name
    from [ITSys].[dbo].[Technology] t
    inner join
    [IT360servicedesk].[dbo].[Resources] r
    on 
    t.IT360ID = r.RESOURCEID
  inner join
   [IT360servicedesk].[dbo].[Resourcestate] rs
   on rs.RESOURCESTATEID = r.RESOURCESTATEID
   inner join
   [ITSys].[dbo].[TechnologyTypes] tt
   on tt.AssetTypeID = t.TypeID


    where t.Tag = @Tag and r.RESOURCENAME = @Name
    END

然后我创建了以下视图模型类,以映射存储的生产值:-

public class AdvanceSearch
    {
        public string Tag { set; get; }
        public string Name { set; get; }
        public string type { set; get; }
    }

目前在我的存储库类中,我有以下内容:-

public IQueryable<AdvanceSearch> AdvanceSearch(NetworkAdvanceSearch na, NameAdvanceSearch nas)
        {

            var t = ITSys.AdvanceSearch(nas.name, nas.tag);

//地图应该在这里完成...

但我有以下问题:-

  1. 如何将存储过程返回的值映射到视图模型类中?

  2. 因为这是我第一次在实体框架内使用存储过程,所以我调用存储过程并映射其值的方式是正确的做事方式吗?还是有更好的方法?

谢谢

【问题讨论】:

  • 通常 ADO.NET 实体框架会在 C# 中为存储过程结果创建包装类。我将它映射到视图模型。

标签: asp.net sql asp.net-mvc entity-framework


【解决方案1】:

建议:

  1. 不要使用视图模型直接从数据存储中获取数据。
  2. 使用域类或数据传输对象来获取它。所以在你的情况下,

一个。如果您使用 ADO.NET 运行 SPROC 并获得结果,则需要手动定义类。 湾。您可以利用 LINQ2SQL 或 EntityFramework,它们可以帮助您使用自动生成的类来映射 SPROC 结果。 (使用 EF,您可能需要进行一些手动编辑)

  1. 存储库填充数据类后,让控制器将它们转换为视图模型并呈现视图。

例如代码

public class MyController : Controller
{
 public virtual ActionResult Search() // take search parameters etc.
 {
  // this could be DTO or Domain classes or EF objects etc.
  IEnumerable<IDataTransferObject> results = _repository.AdvanceSearch();

  // you can do the transformation using extension methods, or linq to objects
  // or helper methods, or tools like auto mapper etc.
  IEnumerable<AdvanceSearch> model = results.ToAdvanceSearchViewModel();

  // return the view with the model data it needs.
  // this View Model is different from repository objects to keep the concerns 
  // separate.
  return  View(model); 
 }
}

【讨论】:

  • 感谢您的回复,但为什么我不应该使用视图模型直接从数据存储中获取数据。?
  • 同样,当我从两个数据库中获取结果时,我没有代表从存储过程返回的结果的域模型,因此我创建了一个视图模型类..
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多