데이터베이스에서 검색을 설정하려고합니다. EF (Entity Framework) 개체 emUser
및 일반 클래스 User
이 emUser에서 상속되지만 추가 기능이 추가되었습니다.Entity Framework 개체에서 상속
public class User : emUser
{
#region Properties
public string Username
{
get { return Email; }
}
public string FullName
{
get { return FirstName + " " + LastName; }
}
#endregion
}
public partial class emUser : EntityObject
{
[code ...]
}
사용자가 emUser로부터 상속 받았지만 명시 적으로 변환 할 수 없습니다. 내가 사용하고 코드 :
List<User> returnUsers = new List<User>();
var users =
(from u in edm.UserSet.OfType<emUser>()
select u);
if (users != null)
{
foreach (emUser user in users)
{
User newUser = (User)user;
returnUsers.Add(newUser);
}
}
return returnUsers;
나는 User
emUser에 대한 래퍼를 만들 수 있지만, 나는 그것을 내가 emUser을 변경할 때마다 변경해야합니다. 기술 서비스 계층과 도메인 계층에서 사용되는 클래스를 구별하기 위해 User
을 사용하고 싶습니다.
{System.InvalidCastException: Unable to cast object of type 'Services.emUser' to type 'Users.User'. at Services.DatabaseController.GetUsers() in [file path]:line 412}
가 왜 사용자에 emUser을 변환 할 수 없습니다 :
는이 같은 오류 메시지가? 그것에 대해User
을 모르기 때문에 EF 만
emUser
객체를 반환 할 수 있습니다와
emUser
는
User
하지 않을 수 있습니다 : 여기
'사용자'는 'emUser'이지만 '사용자'는 '사용자'가 아닙니다. 너는 그렇게 할 수 없다. – SLaks
왜이 다운 캐스트가 효과가 있다고 기대합니까? EF는 오직'EMUser' 객체 만 반환 할 수 있습니다. 가치가있는 부분에 대해서는 모델 계층과 서비스 계층에 대한 병렬 데이터 구조를 갖는 것이 나쁜 생각이며 상속을 잘못 사용한다고 생각합니다. 서비스 레이어가 그 아래의 레이어와 통신하는 것은 나쁜 디자인이 아닙니다. 해당 레이어에 속하지 않는 모델 클래스를 사용하여 기능을 추가해야하는 경우 직각으로 수행하십시오. (모델 개체를 매개 변수로 사용하는 "일반"함수 나 서비스 계층에 정의 된 확장 메서드 사용) – millimoose