2012-02-25 3 views
0

これを正しく聞いているかどうかわかりません(私はEFを初めて使っています)。私のエンティティフレームワークリストをpocoのリストとして扱います

基本的にはここに私の問題があります。私は本当に単純なクラスである都市と呼ばれるクラスを、持っていますが、それは後で私のシステムでは今私のDBテーブルを正確に

public class City 
{ 
    public int Id { get; set; } 
    public string Country { get; set; } 
    public string Province { get; set; } 
    public string CityName { get; set; } 

    public City() 
{ 
    // TODO: Add constructor logic here 
} 
} 

をマッピングし、私は都市のリストを持っている 公共リスト都市{取得します。プライベートセット;このよう

using (MYdbEntities myentity = new MYdbEntities()) 
     { 
      var efCities = (from c in myentity.Cities 
         orderby c.CityName 
         select c);   
      Cities = efCities.ToList(); //this line croaks   
     } 

など}

とLINQクエリだから私はこの問題は、都市が異なる市オブジェクトのリストである一方、LINQは、モデルからのエンティティのリストを返すことであることを取得します。 私は広告はT4について奇妙なものを取得するグーグルどのように私は都市にefCitiesをキャストすることができます(私自身のマッピングBLECHと恐ろしいループを行うことの短い)

は私のためのテンプレートの何かに plsはダム何かそれダウンを生成:)

私は他の場所で

おかげ

+0

EFコードファースト(> 4.1)を使用していますか? –

答えて

1

を、それを使用する予定ので、私は、私は右のあなたを理解していれば、あなたの都市クラス(モデル)がないEntity Frameworkの任意の知識がなくてもできるだけ簡単に私の市のオブジェクトを維持したいと思いますEFによって作成されたものと同じですが、同じような特性の同じ。

あなたが持っているものに基づいて、最も簡単な方法は、

var myCities = (efCities.Select(o=> new City() { 
    Id = o.Id, 
    Country = o.Country 
    .... 
}).ToList(); 

言い訳してください、フォーマット、iPad上で困難にあります。

基本的には、選択機能で各プロパティをマッピングするCityクラスの新しいリストを作成しています。

代わりに、AutoMapperのようなものを使ってCitiesクラスを自動的にマップ/ポピュレートすることができます。 AutoMapperはhttp://automapper.codeplex.com/にあります。

あなたは(同じ名前の)destionationオブジェクトにソースオブジェクトのプロパティをコピーするための拡張メソッドCopyToを書くことができます

サム

+0

hmmmm、私は理解していると思いますが、新しいMyCities()はどこから来たのですか – Crudler

+0

何かの理由で申し訳ありません、私はあなたの都市クラスが(不十分な)都市に指定されていて、私は答えを編集しました:) – sambomartin

+0

ありがとうございます。爆弾のように働く。それでもC#にはまだ新しいので、本当に強力な=>を使ってフィールドをマップすることはできませんでした。 – Crudler

0

に役立ちます願っています。

public class City1 
{ 
    public int Id { get; set; } 
    public string Country { get; set; } 
    public string Province { get; set; } 
    public string CityName { get; set; } 
} 

public class City2 
{ 
    public int Id { get; set; } 
    public string Country { get; set; } 
    public string Province { get; set; } 
    public string CityName { get; set; } 
} 

City2 c2 = new City2(); 
new City1() { 
     Id = 3, Country = "aaa", Province = "bbb", CityName = "ccc" } 
.Copy(c2); 

//or 

City2 c2 = new City1() { 
      Id = 3, Country = "aaa", Province = "bbb", CityName = "ccc" } 
      .Copy<City2>(); 

:あなたのselect cは今select c.CopyTo<City>()

例だろう。

public static class MyExtensions 
{ 
    public static void CopyTo(this object src, object to) 
    { 
     Type dstType = to.GetType(); 
     foreach (var prop in src.GetType() 
           .GetProperties() 
           .Select(pi => new { Name = pi.Name, Value = pi.GetValue(src, null) })) 
     { 
      dstType.GetProperty(prop.Name).SetValue(to, prop.Value, null); 
     } 
    } 

    public static T CopyTo<T>(this object src) 
    { 
     Type dstType = typeof(T); 
     T to = (T)Activator.CreateInstance(dstType); 
     CopyTo(src, to); 
     return to; 
    } 
} 
関連する問題