0

ASP.NET MVC 4 は初めてです。DATABASE FIRST APPROACH の使用。私の質問によると、SQL ストアド プロシージャを使用してデータを取得し、jQgrid に入力しています。ただし、Org テーブルからの OrgName を除くすべての BO テーブル データを取得しています (ストアド プロシージャを参照)。では、OrgName を取得するにはどうすればよいでしょうか???

私のストアドプロシージャは次のとおりです。

ALTER PROCEDURE [dbo].[GetBODetails]
AS
  BEGIN
    SELECT   b.Id, b.OrgId, b.Code, b.Name, o.Name AS OrgName
    FROM     Org AS o INNER JOIN BO AS b ON o.Id = b.OrgId
  END

  Columns of BO table :
  Id = GUID
  Code = NVARCHAR(50)
  Name = NVARCHAR(50)
  OrgId = Foreign Key ref from Org table Id

  Columns of BO table :
  Id = GUID
  Name = NVARCHAR(50)

モデルブラウザウィンドウから「関数インポートの追加」を実行して、この手順をMVCプロジェクトで使用しました;この記事を参照してここをクリックしてください。これを行っている間、[エンティティのコレクションを返す] を選択します。これは BO モデルです。
BO と Org で生成されたモデルは次のとおりです。

BO.cs

 public partial class BO
 {
    public System.Guid Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
    public System.Guid OrgId { get; set; }

    public virtual Org Org { get; set; }
 }   

Org.cs

 public partial class Org
 {
    public Org()
    {
        this.BOes = new HashSet<BO>();
    }

    public System.Guid Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<BO> BOes { get; set; }
 }

Stored Procedure を実行するコントローラーのコード:

private iregEntities m_oDbCont = new iregEntities();

    // GET: /BO/

    public JsonResult BOGrid()
    {
        m_oDbCont.Configuration.ProxyCreationEnabled = false;

        var BOList = m_oDbCont.GetBODetails().ToList(); // Executing stored procedure

        var JsonBOList = new
        {
            rows = (
                from BOData in BOList
                select new
                {
                    id = BOData.Id.ToString(),
                    cell = new string[] { BOData.OrgId.ToString(), BOData.Code,  BOData.Name }
                }).ToArray()
        };

        return Json(JsonBOList, JsonRequestBehavior.AllowGet); returning data into JSON format
    }

    protected override void Dispose(bool disposing)
    {
        m_oDbCont.Dispose();
        base.Dispose(disposing);
    }
4

1 に答える 1

1

BO関数のインポート中に、結果をエンティティにマッピングするのではなく、新しい複合型を作成するように依頼します。エンティティにマップすると、BOこのエンティティのみがデータで満たされるため、Org空になります。
複合型にマッピングする場合、EF は、SP によって返されるすべての列を含む新しいクラスを自動的に作成します。

SP の結果を特定のエンティティにマッピングすると、SP がその特定のエンティティを返す場合に役立ちます。これにより、SP をインポートするたびに無駄な複合型が作成されるのを回避できます。

于 2013-10-17T15:11:57.023 に答える