나는이 작동하지 않는 이유를 알아 내기 위해 노력하고 ...Entity Framework 코드 우선 : 데이터베이스에서 반환 된 엔티티 집합을 어떻게 캐스팅 할 수 있습니까?
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>
...
내가
IEnumerable<DomainModel.Models.Address>
을 받아보기를 변경하지 않으면 예상대로 16,
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);
}
}
이제, 주조 모든 작동합니다.
내가 노력하고 내가 다음과 같은 오류 얻을 캐스트 할 왜 addresses
동적 프록시의 모음입니다도 AsEnumerable()
를 호출 한 후 컨트롤러에서
Unable to cast object of type 'System.Data.Entity.DynamicProxies.Address_37444C79F0AB1E0A599C8797F37448F12213C5BCAC0611B4C1C8EFADDEFAA82C' to type 'WebUI.Models.AddressVM'.
를? 뷰 모델에 캐스트 할 수 있도록 내 도메인 모델 개체의 컬렉션을 가져 오려면 어떻게해야합니까?
AddressVM 코드를 표시 할 수 있습니까? –
왜 당신은 어쨌든 비 프록시 IP 주소를'캐스트'할 수 있다고 생각합니까? 프록시는 빨간 청어입니다. 진짜 문제는 호환되지 않는 유형을 캐스팅하려고한다는 것입니다. –
음, 캐스팅을 수행 할 명시 적 연산자를 설정했습니다. 나는 간결함을 위해 그 코드를 포함시키지 않았지만 나는해야한다고 생각한다. 주소보기 모델에 대한 코드를 추가했습니다. 지금은 더 이해가 되니? 나는 Cast()에 대한 호출이 명시 적 연산자를 사용하여 컬렉션의 각 객체를 통해 열거하고 형변환한다는 가정하에있었습니다. –