2011-07-29 3 views
0

가 나는 사람과 프로젝트와EF 코드 첫째, 다형성

public class Person : BaseClass 
    { 
     public string Email { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 

     public virtual ICollection<Team> ParentTeams { get; set; } 
     public virtual ICollection<Team> ChildTeams { get; set; } 

     [NotMapped] 
     public bool IsChildPerson { get; set; } 
    } 

public class RegisteredPerson : Person 
    { 
     public int ProxyId { get; set; } 
    } 

등록 된 사람이 사람을 상속 등록 된 사람이 캐스팅.

사람이 등록 된 사람이됩니다. 그러나 그 사람은 이미 팀에 묶여있다.

등록 된 사람에게 다른 데이터베이스에 대한 링크를 잃지 않고 어떻게 사람을 캐스팅 할 수 있습니까?

답변

0

내가 아는 한, 당신은 아래쪽으로 캐스트 할 수 없습니다. 당신이 할 수있는 일은 automapper과 같은 매핑 라이브러리를 사용하여 사람 개체를 RegisteredPerson으로 매핑 한 다음 저장하려면 컨텍스트를 사용하는 것입니다.

예 :이 도움이

using AutoMapper; 

//Create Map from Person to RegisteredPerson 
Mapper.CreateMap<Person, RegisteredPerson>(); 

//Load person from Database 
Person p = context.Persons.SingleOrDefault(predicate); 
//Map Person to RegisteredPerson 
RegisteredPerson r = Mapper.Map<Person, RegisteredPerson>(p); 
//Assign values to RegisteredPerson 
r.ProxyId = SomeValue; 
using (var context = new YourContext()) 
{ 
    context.Persons.Attach(r); 
    context.SaveChanges(); 
} 
//Load new RegisteredPerson 
using (var context = new YourContext()) 
{ 
    RegisteredPerson rp = context.Persons.OfType<RegisteredPerson>().SingleOrDefault(predicate); 
} 

희망 ...

당신의 문제가이 문장에있다
0

: 특정 시점에서

사람이 등록 된 사람

에게이된다

정적 OOP에서 클래스의 인스턴스는 다른 c가 될 수 없습니다. 젊은 여자.

상속을 사용하지 마십시오. 대신 IsRegistered 플래그를 저장하십시오.

관련 문제