我有一个人和一个注册人的项目
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 :(得分: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);
}
希望这会有所帮助......
答案 1 :(得分:0)
你的问题在于这句话:
在某个时刻,该人成为注册人
在静态OOP中,类的实例不能“变成”不同的类。
不要使用继承。而是存储IsRegistered
标志。