2017-07-07 10 views
0

私は以下のように見えるモデルがあります:MCVコアのDropDownListストアドプロシージャ

public partial class RoutePartner 
{ 
    public Guid Id { get; set; } 
    [Required] 
    public Guid PartnerId { get; set; } 
    [Required] 
    public string RouteCompany { get; set; } 
} 

をPARTNERIDはIDと名前を持つ別のテーブルから来ています。私はCRUDフォームを構築して、パートナーのリストを読み込んでフォームに利用できるようにしようとしています。これがMVCコアでこれを行う最善の方法ですか?私は多くの.NETの例を見ていますが、COREはありません。

最後のポイントは、パートナードロップダウンにストアドプロシージャを設定することです。

おかげ ダン

答えて

0

あなたのクラスは、データベースと同じにする必要はありません。 ParnterIDとPartnerNameを持つPartnerというクラスを持っていないのはなぜですか? RoutePartnerクラスには、IDの代わりにPartnerプロパティがあります。

Public class SomeViewModel //Used by your view 
{ 
    public RouteParnter {get; set;} 
    public ParnterList List<SelectListItem> {get; set;} 

public static List<SelectListItem> PopulateDropdown() 
    { 
     List<SelectListItem> ls = new List<SelectListItem>(); 
     DataTable someTable = Database.LoadParnters(); // Database is your data layer 
     foreach (var row in someTable.Rows) 
     { 
      ls.Add(new SelectListItem() { Text = row["PartnerName"].ToString();, Value = row["PartnerID"].ToString(); }); 
     } 
     return ls; 
    } 
} 

public partial class RoutePartner 
{ 
    public Guid Id { get; set; } 
    [Required] 
    public Partner SomePartner { get; set; } 
    [Required] 
    public string RouteCompany { get; set; } 



    public RouteParnter(Guid id) 
    { 
    DataRow returnedRow = Database.LoadRouteParnter(id); 
    Id = id; 
    // Assuming your DataRow returned has all the info you need. 
    RouteCompany = row["RouteCompany"]; 
    SomePartner = new Partner(); 
    SomePartner.PartnerId = row["PartnerID"]; // cast to guid, just example 
    SomePartner.PartnerName = row["PartnerName"].ToString(); 

    } 
    } 

    public class Partner 
    { 
     public Guid PartnerId { get; set; } 
     public string PartnerName { get; set; } 

    } 

私は緩やかにデータレイヤーを結合します。 ADO.NETやその他の方法でデータベースと通信できます。私は通常、データ層を呼び出すために、パラメータ化されたコンストラクタを作成する(たとえば、ロードするIDを取り込む)ことによってこれを行います。データレイヤーは、DataTable、DataRow、DataSet、またはカスタムオブジェクトを返します。コンストラクターでは、RouteParnterオブジェクトの値を設定します。同様に、ViewModelにListを持たせることもできます。

+0

良いアイデアは、私が考えていたよりも優れています。 Model RoutePartnerをどのように配置しますか?また、私はまだパートナーをドロップダウンとして表示する方法がわかりません。 – Dann055

+0

が少し更新されました。私はデータレイヤーを含めなかったし、ドロップダウンリストをどのように使うのか。基本的に、データレイヤーからデータを返し、エンティティレイヤーにロードし、別のViewModelを持ちます。 – james31rock

+0

もう一度お手数をおかけします。私はDatabase.LoadRoutePartner(id)メソッドを理解していません。これはDatabase.LoadRoutePartner()がDatabaseクラスに存在しないために作成したものです。 – Dann055

0

私はこの問題をどのように解決したかを簡単にお知らせしたいと思います。 EFのPartnerContextを作成しました。リストにアクセスする必要のあるコントローラでは、作成したViewBagにPartnerContext.ToList()を配置し、ASPヘルパを使用してリストをロードしました。

関連する問題