0

私は次のテーブルを持っています:- ここに画像の説明を入力

しかし、asp.net mvc4 Web アプリケーション内にビュー モデル クラスを作成する方法を教えてください。AccountDefinition.OrgID を渡すと、次のものを取得できます。

• アカウントの定義

•SDOrganization

• SDOrgPostalAddr

• AaaPostalAddress

次の CustomerDetails ViewModel を作成しました

public class CustomerDetails
    {
        public AccountDefinition AccountDefinition {get; set;}
        public SDOrganization SDOrganization {get; set;}

        public virtual ICollection<AaaPostalAddress> AaaPostalAddress { get; set; }
 public virtual ICollection< SDOrgPostalAddr> AaaPostalAddress { get;set; }

    }

ORG_ID に基づいて CustomerDetails を入力する必要がある次のリポジトリ メソッドがあります。

public   CustomerDetails GetCustomer(int ORG_id) {

CustomerDetails cd = new CustomerDetails();
var cd = from SDorg in cd.AccountDefinition // here I will b populating the CustomerDetials
        }

私の2番目の質問は、データベースの経験があるので、テーブルを結合して結果を返すストアドプロシージャを実行します!!!しかし、エンティティフレームワークを使用しているため、その方法について混乱しましたか?

ブラジル

4

1 に答える 1

1

データベース スキーマからエンティティ フレームワーク モデルを作成した場合は、次のものが必要です。

  • 2 つの関係が明らかに 1 対 1 であるため、参照ナビゲーション プロパティAccountDefinitionを持つクラスAccountDefinition.SDOrganization

  • 関係が多SDOrganization.AaaPostAddresses対多であるため、コレクション ナビゲーション プロパティ。SDOrgPostalAddrテーブルは多対多のリンク テーブルであるため、モデル エンティティとして表示されません。

このモデルを使用して、ビューモデルを次のように変更します...

public class CustomerDetails
{
    public AccountDefinition AccountDefinition {get; set;}
    public SDOrganization SDOrganization {get; set;}

    public ICollection<AaaPostalAddress> AaaPostalAddresses { get; set; }
}

...次を使用して結果を取得できるはずです。

var customerDetails = context.AccountDefinitions
    .Where(a => a.OrgID == givenOrgID)
    .Select(a => new CustomerDetails
    {
        AccountDefinition = a,
        SDOrganization = a.SDOrganization,
        AaaPostalAddresses = a.SDOrganization.AaaPostalAddresses
    })
    .SingleOrDefault();

必要なナビゲーション プロパティと一緒にエンティティを熱心に読み込むことで、同じデータをフェッチすることもできます。AccountDefinition

var accountDefinition = context.AccountDefinitions
    .Include(a => a.SDOrganization.AaaPostalAddresses)
    .SingleOrDefault(a => a.OrgID == givenOrgID);
于 2013-07-07T16:21:39.683 に答える