1

EF, nHibernate 및 Dapper/Dapper.SimpleCRUD를 사용하여 보았습니다. 어느 누구도 내 데이터베이스 (SQL Server 2012) 모델과 관련하여 유스 케이스를 표현하는 방법을 알아낼 수 없습니다. C# 4.0/.NET 4.0 (그리드의 초기 상태가 드롭 다운으로 설정 됨)의 CRUD 기능을 갖춘 ASP.NET 웹 사이트를 기술적 인 제한으로 인해 구축하고 있습니다.내 코드를 DB로 설정하는 방법 ORM에서 처음으로

내 두 테이블은 같은 설정되어 유통 및 Address_Book Address_book.EntryID = Distribution.EntryID 사이의 다 대일 관계

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] 

.

설정하는 방법에 대한 도움을 주시면 감사하겠습니다. CRUD 작업을 수동으로 관리하는 데 문제가 있으므로 ORM이 도움이 될 것이라고 생각했지만 해결할 수는 없습니다. 어떤 도움을 주셔서 감사합니다.

미리 감사드립니다.

+0

무엇이 가장 문제가됩니까? GridView? 수업을 설정 하시겠습니까? 선택기로 드롭 다운을 사용하는 gridivew 설정? – secretwep

+0

논리 모델에 매핑되는 클래스를 설정합니다. 나는 그것이 어떻게 작동해야하는지에 대한 내 머리 속에 모델을 가지고 있지만, 그런 일이 일어나게하는 것은 어리 석다. AddressBook 항목에는 여러 개의 Distribution이 연관되어있을 수 있으며, 새로운 Distribution을 생성하고 기존 Distribution을 업데이트 할 수있는 클래스를 생성하는 방법도 포함되어 있습니다. – Jacrys

+0

EntryID 란 무엇입니까? 다른 테이블에서 나온 건가요? 하나의 주소에 하나의 배포판 만있을 수 있습니까? – secretwep

답변

0

전체 .net CRUD 것은 많은 풍미와 작업 방식을 갖춘 큰 영역입니다. 그리고 당신이 어디에 있는지 정확히 알지 못하는 사이에, 다음과 같은 도움이 필요합니다. 내 경험상 EF는 관계를 아주 잘 처리 할 수 ​​있지만 전체 EF 학습 과정은 조금 가파르다. 나는 일반적으로 Dapper를 확장자와 함께 사용하고 pseudo-manually로 수동으로 처리한다. 나는 SimpleCrud 확장을 사용하지 않았다. DB를 상속 받았기 때문에 설정이 잘되어 있고 배포, 열 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 
    } 
} 

:

말끔에서이 같은 클래스를 설정할 수

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

당신은에 뒤에 코드에서로드 (및 람다 식을 추가 할 수 있습니다 사전 정렬 용) :

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

필요한 모든 드롭 다운을 비슷한 방식으로로드 할 수 있습니다.

모든 것이 필요에 따라 다릅니다. Distribution에 대한 gridview가있는 경우 행 모드 바운드 이벤트에서 편집 모드에있을 때 Address에 대한 드롭 다운을 추가 할 수 있습니다. 업데이트하고 저장하려면 레코드를 저장하기 전에 행에서 해당 컨트롤을 찾아 선택한 값을 구문 분석해야합니다. 이 일을 성실히 수행 할 수있는 유일한 방법은 없습니다. 하지만 CRUD 방식으로 모든 비즈니스 수업을 설정했다면 더 간단하게 연결할 수 있습니다.

+0

고마워요! 왠지 내 머리를 감쌀 수 없었다! – Jacrys