2011-07-29 81 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标志。