2014-02-19 34 views
1

我得到了我在實體框架使用下面的實體模型:添加額外的數據模型(?向下轉換)

public class User { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string EMail { get; set; } 
} 

現在,我想在WPF,MVC顯示給用戶的視圖(MVVM在ASP.NET中...),但還有其他信息在數據庫中不可用,但可以在運行時從服務中獲取。

對於這一點,我創建了一個派生模型類:

public class UserDetail : User { 
    public bool IsOnline { get; set; } 
} 

現在一些亂碼代碼,描述我想達到的目標:

var users = _myContext.Users 
       .ToList() 
       .Select(x => new UserDetail() { 
         IsOnline = _myUserService.IsOnline(x.Id) 
        } = (UserDetail)x); // downcast x (User) to the new UserDetail instance 
return View["MyView", users]; 

現在,向下轉換不工作的方式在C#..我有任何其他選項來實現我想要的?

回答

1

您可以通過複製到UserDetail來添加構造函數。

public class UserDetail : User 
{ 
    public UserDetail(User x) 
    { 
     this.Id = x.Id; 
     this.Name = x.Name; 
     this.EMail = x.EMail; 
    } 

    public bool IsOnline { get; set; } 
} 

(可通過T4可以產生那種構造的,如果你有這種行爲的許多類)

然後,改變你的LINQ和使用該構造:

var users = _myContext.Users 
      .ToList() 
      .Select(x => new UserDetail(x) { 
        IsOnline = _myUserService.IsOnline(x.Id) 
       }); 
return View["MyView", users]; 
0

不,你必須逐個複製屬性,或者寫一些代碼,它會爲你做。

0

創建單獨的視圖模型。您不應該擴展您的實體模型以適應您的視圖所需的屬性。然後,您可以按照zahorak建議一個一個地複製屬性,也可以使用專門爲此任務設計的庫,如AutoMapper