2016-08-19 8 views
0

エンティティフレームワークを使用せずにMVCアプリケーションを実装しようとしていますが、代わりにデータテーブルを使用してビジネスオブジェクトを生成していますが、エンティティフレームワークのないMVCパターン

public class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Phone { 
    public int Id { get; set; } 
    public string PhoneNumber { get; set; } 
    public int PersonId { get; set; } 
} 

私はEFを使用した場合は、Personクラスは、携帯電話や携帯電話のクラスを取得するには、ナビゲーションプロパティを持っている必要があります人にナビゲーションプロパティを持っている必要があります。

は、私はこの単純なclasessがあるとします。私は携帯電話を持つ人のリストを表示しなければならなかったのであれば、SQLの結果は次のようになります。

------------------------------------------------------------ 
| **PersonId** |**Name** | **PhoneId** | **PhoneNumber** | 
------------------------------------------------------------ 
|    1 | John Doe |   1 | 111-55-5855  | 
------------------------------------------------------------ 
|    1 | John Doe |   2 | 111-55-5521  | 
------------------------------------------------------------ 
|    2 | Mary Jane|   3 | 254-565-855  | 
------------------------------------------------------------ 
|    3 | J. Watson|   NULL|    NULL| 
------------------------------------------------------------ 

はこれまでのところ、私がやったことはこれです:私の見解で

、私は連絡先を表示しなければなりません

------------------------------------------------------------ 
|**Name** | ** Phones **        | 
------------------------------------------------------------ 
| John Doe | 111-55-5855, 111-55-5521     | 
------------------------------------------------------------ 
| Mary Jane| 254-565-855         | 
------------------------------------------------------------ 
| J. Watson| -           | 
------------------------------------------------------------ 

3番目のクラスを作成しましたが、その必要があるかどうかはわかりません。このクラスでは、私はSQLクエリによって返されている結果を格納しています。この結果は上記の最初の表とまったく同じで、EFが返すものと同じです。あなたが本当にここまで来ている場合は、あなたが本当にしなければなりません

public class PersonListViewModel { 
    public int PersonId { get; set; } 
    public string PersonName { get; set; } 
    public string Phones { get; set; } 
} 

(:

public List<PersonForList> GetPeopleWithPhones { 
    List<PersonForList> people = new List<PersonForList>(); 
    SqlCommand command = new Command(query); 
    var dt = ExecuteDataTable(command); 

    foreach(DataRow row in dt.Rows){ 
     var person = new PersonForList() { 
      ... Fill object 
      PersonId = (int)row["PersonId"], 
      ... 
     } 
     people.Add(person); 
    } 
    return people; 
} 

そして最後に、私のviewmodel:

public class PersonForList { 
    public int PersonId { get; set; } 
    public string PersonName { get; set; } 
    public int PhoneId { get; set; } 
    public string PhoneNumber { get; set; } 
} 

私はこの方法でPersonManagerを持っています患者さん= S)

質問:

私のリストにページを設定する必要がある場合、どのようにレコードを数えればよいのですか?ジェーン・フォンズ、これは3行ですが、違う人のためではありません。

ビューモデルを作成するにはどうすればよいですか?リスト全体を繰り返して、すべての携帯電話で一人の人を取得する方法はわかりません。

私のクラスPersonForListは本当に必要ですか?

どういうわけか、これはEntity Frameworkの動作であり、最小限のクエリ数でデータを取得しようとしています。

私は非常に具体的にしようとしましたが、質問は短くしていますが、詳細が必要な場合は私があなたに提供することができます。

+0

複数の投稿で質問する方が良いです。まず、なぜあなたはEFを使いたくないのですか?ページングデータの場合は、SQL Serverのどのバージョンを使用するかによって異なります。たとえば、SQL 2014ではOFFSET、別のバージョンではRow_numberを使用できます。 –

+0

My Bookでは、PersonForListは必要ありません。私はEFがあなたの質問を据え置いた方が良いと思う。 –

+0

自分のORMを使用していますが、実際には結合をサポートしていないので、結合が必要な場合は未処理のクエリを作成し、結果を手動でマッピングする必要があります。私はSQL Server 2014を使用しています。 –

答えて

0

あるオブジェクトから別のオブジェクトにデータをマッピングするには、AutoMapperを使用します。他のツールも使用できます。

しかし、私は誰もが同意する、あなたの人生を32%幸せにするORMを使用します。

関連する問題