Сначала код EF, приведение полиморфизма - PullRequest
0 голосов
/ 29 июля 2011

У меня есть проект с человеком и зарегистрированным лицом

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; }
    }

Зарегистрированный человек наследует человека.

В определенный момент человек становится зарегистрированным лицом. Но человек уже связан с командой.

Как я могу привести персона к зарегистрированному человеку, не теряя ссылки на другие базы данных?

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Ваша проблема заключается в этом предложении:

В определенный момент человек становится зарегистрированным лицом

В статическом ООП экземпляр класса не может «стать» другим классом.

Не используйте наследование для этого. Вместо этого сохраните флаг IsRegistered.

0 голосов
/ 29 июля 2011

Насколько я знаю, вы не можете бросить вниз. Что вы могли бы сделать, это использовать библиотеку сопоставлений, такую ​​как automapper , чтобы сопоставить объект Person с 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);
}

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...