2011-07-29 113 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標誌。