![](/img/trans.png)
[英]How to delete all related entities from database with Entity Framework code-first
[英]Entity Framework Code First: How can I cast a set of entities returned from the database?
我想弄清楚為什么這不起作用......
的DomainModel
public class ModelEntities : DbContext
{
public DbSet<Address> Addresses { get; set; }
}
調節器
public ViewResult List(int id)
{
var db = new ModelEntities();
var addresses = db.Addresses.Where(x => x.CustomerID == id).AsEnumerable();
return View(entities.Cast<AddressVM>());
}
視圖
@model IEnumerable<WebUI.Models.AddressVM>
...
AddressVM
public class AddressVM
{
public AddressVM(Address address) { Bind(address); }
private void Bind(Address address)
{
// Mapping logic is defined here
}
public static explicit operator AddressVM(Address address)
{
return new AddressVM(address);
}
}
現在,如果我更改視圖以接受IEnumerable<DomainModel.Models.Address>
並且不執行轉換,則一切都按預期工作。
當我嘗試進行演員時,我收到以下錯誤:
無法將類型為“System.Data.Entity.DynamicProxies.Address_37444C79F0AB1E0A599C8797F37448F12213C5BCAC0611B4C1C8EFADDEFAA82C”的對象強制轉換為“WebUI.Models.AddressVM”。
在控制器中,為什么即使在調用AsEnumerable()
之后也會addresses
動態代理的集合? 我需要做些什么來獲取我的域模型對象的集合,以便我可以將它們轉換為視圖模型?
我打賭你誤解了演員的概念。 強制轉換意味着AddressVM實例是一個Address實例...我認為它不是。 您可能必須從Address對象“轉換”或實例化AddressVM對象。 試試這個 :
public ViewResult List(int id)
{
var db = new ModelEntities();
var addresses = from a in db.Addresses.Where(x => x.CustomerID == id)
select new AddressVM(a);
return View(addresses );
}
[編輯]根據Brian的回答 ,如果實際類型和目標類型之間存在隱式轉換,則可以轉換對象。
如果您希望能夠為其轉換Address
,則需要在AddressVM
上設置顯式運算符 。 如果要將數據從域模型輕松移動到視圖模型,可以查看AutoMapper。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.