0

我有一个 dbml,它的存储过程被拖走了。我有 EmployeeModel 类,它具有 get 和 set 属性。

我有一个接口 IEmployee 和一个具有方法实现的 Repository Employee Repository。请参考代码。在存储过程 GetRoles 我只有 SELECT * FROM ROLE 。

在存储库中如何遍历结果集。我可以在 dbml 设计器文件中将 ISingleResult 更改为 IMultipleResult 吗?

EmployeeModel.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcWebsite.Models
{
    public class EmployeeModel
    {
        public int RoleId { get; set; }
        public string RoleName { get; set; }
        public string Description { get; set; }
        public string TaskMark { get; set; }
        public int RoleFlag { get; set; }
    }
}

员工:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MvcWebsite.Models;

namespace MvcWebsite.DAL
{
    public interface IEmployees
    {
        IList<EmployeeModel> ListAll();
        // void Save(EmployeeModel employ);
    }
}

EmployeeRepository.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcWebsite.Models;
using System.Data.Linq;

namespace MvcWebsite.DAL
{
    public class EmployeeRepository:IEmployees
    {

        private DataDataContext _dataContext;

        public EmployeeRepository()
        {
            _dataContext = new DataDataContext();
        }


        public IList<EmployeeModel> ListAll()
        {
            //IMultipleResults result =_dataContext.GetRoleDetails();
            //var Emps = result.GetResult(EmployeeModel);
            List<EmployeeModel> emp = _dataContext.GetRoleDetails();
            // foreach (GetRoleDetailsResult role in Emps)
            // {
            // role.Description=Emps.

            // }
            return Emps.ToList();

        }
    }
}
4

1 回答 1

0

您可以循环遍历结果集,如下所示:

        List<EmployeeModel> employeeModels = new List<EmployeeModel>();
        foreach (EmployeeModel employeeModel in _dataContext.GetRoleDetails())
        {
            employeeModels.Add(employeeModel);
        }

或者您可以使用 System.Linq.Enumerable 类 ToList<> 方法,如下所示:

List<Product> products = context.GetProducts().ToList<Product>();

当存储过程返回多个结果集时使用 IMultipleResults。但是,当您将此类过程交给设计器时,它不会生成 IMultipleResults。为此,您可以更改设计器生成的代码以使用 IMultipleResults,如下所示:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetCustomerAndProducts")]
[ResultType(typeof(Customer))]
[ResultType(typeof(Product))]
public IMultipleResults GetCustomerAndProducts()
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
    return ((IMultipleResults)(result.ReturnValue));
}

但是,当您在设计器中进行任何更改时,它会覆盖您的修改,因为它会重新生成代码。为避免这种情况,您可以使用部分类。

或者你也可以使用 SqlMetal 工具。它是一个命令行工具,可为 .NET Framework 的 LINQ to SQL 组件生成代码和映射。此工具生成 IMultipleResults。您可以在此处获取此工具的详细信息:

http://msdn.microsoft.com/en-us/library/bb386987.aspx

编辑:

无论您在 ASP.Net Mvc 或 WinForms 或任何其他表示层中工作,存储库功能都是相同的。

您可以将存储库功能更改为以下内容:

public List<EmployeeModel> ListAll()
{
    return _dataContext.GetRoleDetails().ToList<EmployeeModel>();
}

或者:

public List<EmployeeModel> ListAll()
{
    List<EmployeeModel> employeeModels = new List<EmployeeModel>();
    foreach (EmployeeModel employeeModel in _dataContext.GetRoleDetails())
    {
        employeeModels.Add(employeeModel);
    }

    return employeeModels;
}
于 2013-01-27T06:47:40.060 回答