1

私はEF、nHibernate、Dapper/Dapper.SimpleCRUDを使って調べました。私のデータベース(SQL Server 2012)モデルに関して、ユースケースをどのように表現するかを決めることはできません。私はグリッドの初期状態がドロップダウンによって設定されているCRUD機能を持つC#4.0/.NET 4.0のグリッド(技術的な制限のため)を持つASP.NET Webサイトを構築しています。私のコードをORMのDBとして初めてセットアップする

私の二つの表は、このようなように設定されています

Address_Book 
|_[EntryID] 
|_[Last_Name] 
|_[First_Name] 
|_[Title] 
|_[Office_Num] 
|_[Cell_Num] 
|_[Home_Num] 
|_[Email_Address] 
|_[Special_Info] 
|_[hr24_Emails] 
|_[hr48_Emails] 
|_[RM_Emails] 
|_[Prestige_Emails] 
|_[GEB_Emails] 
|_[LAW_Emails] 

Distribution 
|_[Brand] 
|_[Location_Mnemonic] 
|_[Location_Code_Numeric] 
|_[EntryID] 
|_[Division_Mnemonic] 
|_[Region_Mnemonic] 
|_[Zone_Mnemonic] 
|_[District_Mnemonic] 
|_[Key] 

分布とAddress_Book Address_book.EntryID = Distribution.EntryID間の多対1の関係で。

これを設定する方法については、ご了承ください。私はCRUD操作を手動で管理することに問題があるので、ORMが助けになると思ったが、わかりません。どんな助けもありがとうございます。

ありがとうございます!

+0

あなたは何が最も問題になっていますか? GridView?クラスを設定しますか?セレクタとしてドロップダウンを使用するgridivewを設定しますか? – secretwep

+0

論理モデルにマップされるクラスを設定します。私はそれがどのように動作すべきかという私の頭の中にモデルを持っていますが、それを起こすことは厄介です。アドレス帳のエントリには複数のディストリビューションが関連付けられていて、新しいディストリビューションを作成したり、既存のディストリビューションを更新することができるクラスを作成する方法が用意されています。 – Jacrys

+0

EntryIDとは何ですか?それは別のテーブルからですか? 1つのアドレスに1つのディストリビューションしか持てないのは本当ですか? – secretwep

答えて

0

全体。ネットCRUDものは、多くの味と仕事のやり方を備えた大きな分野です。そして、私はあなたがこれでどこにいるのか正確にはわかりませんが、次の私の助けを引き出します。私の経験では、EFは関係をきちんと扱うことができますが、EFの学習プロセス全体が少し険しくて、私はそれから離れています。私は通常、拡張機能を使ってDapperを使い、擬似手動で処理します。私はSimpleCrud拡張を使用していません。あなたはDBを継承しているので、うまくいけばそれはうまくセットアップされており、Distribution、Column EntryIDにはFK制約があります。同様のGridViewで次に

using Dapper.Contrib.Extensions; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 

namespace Jacrys 
{ 
    [Table("dbo.address_book")] 
    public partial class AddressBook 
    { 
     [Dapper.Contrib.Extensions.Key] 
     public int EntryID { get; set; } 
     public string Last_Name { get; set; } 
     public string First_Name { get; set; } 
     public string Title { get; set; } 
     public string Office_Num { get; set; } 
     public string Cell_Num { get; set; } 
     public string Home_Num { get; set; } 
     public string Email_Address { get; set; } 
     public bool Special_Info { get; set; } 
     public bool hr24_Emails { get; set; } 
     public bool hr48_Emails { get; set; } 
     public bool RM_Emails { get; set; } 
     public bool Prestige_Emails { get; set; } 
     public bool GEB_Emails { get; set; } 
     public bool LAW_Emails { get; set; } 

     //use this only if you need all of the distributions to be 
     //part of your main AddressBook class 
     public IEnumerable<Distribution> Distributions { get; set; } 

     public static AddressBook GetById(short id) 
     { 
      using (IDbConnection cn = new SqlConnection("getConnString")) 
      { 
       cn.Open(); 
       return cn.Get<AddressBook>(id); 
      } 
     } 

     public static IEnumerable<AddressBook> GetAll() 
     { 
      using (IDbConnection cn = new SqlConnection("getConnString")) 
      { 
       cn.Open(); 
       return cn.GetAll<AddressBook>(); 
      } 
     } 

     public int Insert() 
     { 
      using (IDbConnection cn = new SqlConnection("getConnString")) 
      { 
       cn.Open(); 
       return (int)cn.Insert(this); 
      } 
     } 
     public bool Update() 
     { 
      using (IDbConnection cn = new SqlConnection("getConnString")) 
      { 
       cn.Open(); 
       return cn.Update(this); 
      } 
     } 
     public bool Delete() 
     { 
      using (IDbConnection cn = new SqlConnection("getConnString")) 
      { 
       cn.Open(); 
       return cn.Delete(this); 
      } 
     } 
    } 

    [Table("dbo.distribution")] 
    public partial class Distribution 
    { 
     [Dapper.Contrib.Extensions.Key] 
     public int Key { get; set; } 
     public int EntryID { get; set; } 
     public string Brand { get; set; } 
     public string Location_Mnemonic { get; set; } 
     public int Location_Code_Numeric { get; set; } 
     public string Division_Mnemonic { get; set; } 
     public string Region_Mnemonic { get; set; } 
     public string Zone_Mnemonic { get; set; } 
     public string District_Mnemonic { get; set; } 

     //similar CRUD methods to AddressBook follow here 
    } 
} 

Dapperのでは、あなたのようなあなたのクラスを設定することができ

<asp:GridView ID="gvAddresses" runat="server" AutoGenerateColumns="true" DataKeyNames="EntryID"> 
</asp:GridView> 

あなたが背後にあるコードでそれを読み込む(とラムダ式を追加することができます事前ソート用):

gvAddresses.DataSource = Jacrys.AddressBook.GetAll().OrderBy(c=>c.Last_Name); 

必要なドロップダウンリストは、同様の方法でロードできます。

すべては必要に応じて異なります。 Distributionのグリッドビューがある場合は、編集モードのとき(行データのバインドされたイベントで)、Addressのドロップダウンを追加できます。更新と保存に行くときは、レコードを保存する前に行のコントロールを見つけて、選択した値を解析する必要があります。これを行うには、本当に面白い方法はありません。ただし、すべてのビジネスクラスをCRUDメソッドで設定していれば、より簡単にすべてのビジネスクラスをまとめることができます。

+0

ありがとう!私は何らかの理由でこれの周りに頭を包むことができませんでした! – Jacrys

関連する問題