0

ストアド プロシージャがドラッグされた dbml があります。 get および set プロパティを持つ EmployeeModel クラスがあります。

インターフェイス 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>();

IMul​​tipleResultsは、ストアドプロシージャが複数の結果セットを返す場合に使用されます。ただし、そのようなプロシージャをデザイナにドロップしても、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ツールを使用することもできます。これは、.NETFrameworkのLINQtoSQLコンポーネントのコードとマッピングを生成するコマンドラインツールです。このツールは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 に答える