2014-07-10 182 views
0

我有一個存儲在數據庫中的實體,並且正試圖通過api公開它以供選擇更新和刪除。問題是實體的最終形狀與存儲的形狀不一樣。如何合併代碼來完成此操作。實體框架Rest API更改實體

實體是ScheduleTemplate

public int id { get; set; } 
public int templateId { get; set; } 
public int resourceId { get; set; } 
public int titleId { get; set; } 
public int dow { get; set; } 
public int duration { get; set; } 
public string startTimeStr { get; set; } 

但什麼需要暴露在上述但不是道指,持續時間和StartimeStr領域我想用它來計算兩個領域StarDate日期和結束日期。

其中 startdate =以starttimeStr作爲日期時間的相對於當前星期幾(dow)的日期。我想我們需要在發送到客戶端時導出startdate/enddate,並且需要從startdate/enddate接收時導出dow,startimestr和持續時間。從客戶端保存。

如果有人能幫助我解決這個問題的方法。先謝謝你。

回答

0

所有你需要的是某種形式的轉換模式,這應該是雙向的:

public class EntityViewModel 
{ 
    public int id { get; set; } 
    public int templateId { get; set; } 
    public int resourceId { get; set; } 
    public int titleId { get; set; } 
    public int dow { get; set; } 
    public DateTime startDate { get; set; } 
    public DateTime endDate { get; set; } 
} 

public interface IEntityConverter 
{ 
    Entity Convert(ViewModel viewModel); 
    ViewModel Convert(Entity entity); 
} 

public class EntityConverter 
{ 
    public Entity Convert(EntityViewModel viewModel) 
    { 
     return new Entity 
     { 
      id = viewModel.id, 
      templateId = viewModel.templateId, 
      resourceId = viewModel.resourceId, 
      titleId = viewModel.titleId, 
      dow = viewModel.dow, 
      startTimeStr = viewModel.startDate.ToString(), 
      duration = (int)((viewModel.endDate - viewModel.startDate).Ticks) 
     }; 
    } 

    public EntityViewModel Convert(Entity entity) 
    { 
     var startDate = DateTime.Parse(entity.startTimeStr); 
     return new EntityViewModel 
     { 
      id = entity.id, 
      templateId = entity.templateId, 
      resourceId = entity.resourceId, 
      titleId = entity.titleId, 
      dow = entity.dow, 
      startDate = startDate, 
      endDate = startDate.AddTicks(entity.duration) 
     } 
    } 
}