2016-04-02 7 views
0

私は記事と著者のクラスを持っています。LINQでのエンティティとモデルのマッピング

がモデルにそうしてマップエンティティのような記事を取得:

public List<Model.Article> GetArticleList() { 
    using (var db = new ArticlesContext()) { 
     return db.Articles.Select(t => new Model.Article() { 
      Author = MapUserEntityToModel(db.Users.FirstOrDefault(u => u.UserID == t.UserID)) 
      Title = t.Title, 
      Teaser = t.Teaser 
      // etc 
     }).ToList(); 
    } 
} 

LINQは、実行時にその機能を実行することはできませんので、これは動作しません。マッピングを行う最も簡単でクリーンな方法は何ですか?ここで

モデルです:ここでは

namespace Model { 
    public class Article { 
     public string Title { get; set; } 
     public string Teaser { get; set; } 
     public User Author { get; set; } 
     public DateTime DateAdded { get; set; } 
    } 

    public class User { 
     public string DisplayName { get; set; } 
     public string Email { get; set; } 
     public string Website { get; set; } 
     public string PasswordHash { get; set; } 
    } 
} 

は実体である:

namespace MyProj { 
    public class Article { 
     [Key] 
     public int ArticleID { get; set; } 
     public string Title { get; set; } 
     public string Teaser { get; set; } 
     public int UserID { get; set; } 
     public DateTime DateAdded { get; set; } 
    } 

    public class User { 
     [Key] 
     public int UserID { get; set; } 
     public string DisplayName { get; set; } 
     public string Email { get; set; } 
     public string Website { get; set; } 
     public string PasswordHash { get; set; } 
    } 

    public class ArticleContext : DbContext { 
     public ArticleContext() : base("name=conn") { 
      public DbSet<Article> Articles { get; set; } 
      public DbSet<User> Users { get; set; } 
     } 
    } 
} 

答えて

0

は、ナビゲーションプロパティであなたの関係をマッピングし、継続:

public class Article { 
    [Key] 
    public int ArticleID { get; set; } 
    public string Title { get; set; } 
    public string Teaser { get; set; } 

    [ForeignKey("UserID")] 
    public virtual User Author {get; set; } // navigation property 

    public int UserID { get; set; } 
    public DateTime DateAdded { get; set; } 
} 

そしてちょうど彼の同等モデルにあなたのナビゲーションプロパティを投写:

public List<Model.Article> GetArticleList() { 
    using (var db = new ArticlesContext()) { 
     return db.Articles.Select(t => new Model.Article() { 
      Author = new Model.User { 
       DisplayName = t.User.DisplayName, 
       Email = t.User.Email, 
       Website = t.User.Website, 
       PasswordHash = t.User.PasswordHash 
      }, 
      Title = t.Title, 
      Teaser = t.Teaser 
      // etc 
     }).ToList(); 
    } 
} 
0

あなただけの直接db.Articlesを返し、何もする必要はありません。

using Model; 

public List<Article> GetArticleList() { 

    using(var db = new ArticlesContext()) { 
     return db.Articles.ToList(); 
    } 
} 

はあなたのEFを想定すると、モデルがForeign Keysで正しく設定されている場合は、Articleタイプはlazily-evaluアクセス時にUserオブジェクトを返すated Authorプロパティ。前

関連する問題