나는 사용자 정보 (상속 코드)에 대한 IVeryBasicData
를 구현하는 인터페이스 IBasicData
있습니다인터페이스 구현 인터페이스 4
public interface IBasicData:IVeryBasicData
{
byte[] Password { get; set; }
string Email { get; set; }
}
public interface IVeryBasicData:IUser
{
string Name { get; set; }
string UserId { get; set; }
string Description { get; set; }
string Url { get; set; }
}
public interface IUser
{
DateTime CreationTime { get; set; }
string PartitionKey { get; set; }
string RowKey { get; set; }
}
그럼 내가를 반환 UsersDataSource에서하는 방법 GetUsers
이를 IQueryable<IBasicData>
,이 IQueryable을 뷰의 모델로 사용할 수 있기를 원합니다. 하지만 그것을하려고 할 때 Exception이 발생합니다 : 예를 들어 @Hml.DisplayNameFor(model => model.UserId)
으로 호출 할 때 속성을 찾을 수 없습니다.
그래서,이 솔루션 왔어요 :
foreach (var user in usersDataSource.GetUsers())
{
var addUser = new UserViewModel()
{
CreationTime = user.CreationTime,
Description = user.Description,
Email = user.Email,
Name = user.Name,
PartitionKey = user.PartitionKey,
Password = user.Password,
RowKey = user.RowKey,
Url = user.Url,
UserId = user.UserId
};
usersViewModel.Add(addUser);
}
return View(usersViewModel);
UserViewModel는 IBasicData
를 구현하는 클래스입니다. 이 작품은 오히려 못생긴 나에게 보인다. IQuaryable<IBasicData>
을 View 모델로 사용할 수있는 더 좋은 방법이 있습니까?
컨트롤러에서보기를 반환하기 전에 IQueryable <>을 사용하고 데이터 컨텍스트를 삭제했기 때문에 예외가 발생했다고 가정합니다. IEnumberable <>을 반환하고 반환 된 엔터티 집합에서 .ToList()를 호출하려고 했습니까? – Tommy
나는 당신이 말하는 것을 꽤 얻지 못한다고 생각합니다 (이 분야에서 거의 새로운 것). 현재 내 컨트롤러는 다음과 같습니다. public ActionResult Index() { return view (users.GetUsers(). ToList()); } – danielrozo
IQueryable <>은 아직 데이터베이스에서 검색되었거나 검색되지 않은 개체 집합입니다. EF 및 LINQ에서는 실제로 데이터를 열거하거나 목록과 같은 개체에 캐스팅 할 때까지 실행이 지연됩니다. 귀하의 경우에는 HTML을 렌더링하기 시작할 때까지 쿼리가 지연 될 가능성이 가장 높았지만 그 당시에는 데이터베이스에 대한 연결을 이미 닫았다가 폐기했습니다. 따라서 예외가 발생합니다. 아래의 내 대답은 MVC에서 뷰 렌더링을 시작하기 전에 .ToList()를 호출하여 데이터가 있는지 확인하는 것입니다. – Tommy