Добавление нескольких унаследованных экземпляров разных дочерних типов в отображение TPT EF4.1 - PullRequest
0 голосов
/ 17 октября 2011

Учитывая модель:

public abstract class Person 
{
    public int Id {get;set;}
}

public class Customer : Person 
{
    public string Name {get;set;}
}
public class User : Person 
{
    public string Password {get;set;}
}

Мне нужно добавить клиента и пользователя , которые относятся к одному и тому же человеку

context.Set<Customer>().Add(new Customer { Name = "X" });
context.SaveChanges();

Теперь у меня есть 2 записи в моей базе данных

Persons
Id: 1

Customers
Id: 1
Name: X

Когда я пытаюсь добавить пользователя к человеку 1

context.Set<Customer>().Add(new User { Id = 1, Password = "0" });
context.SaveChanges();

Entity Framework игнорирует Id = 1 и создает нового человека. Как заставить это работать?

1 Ответ

2 голосов
/ 17 октября 2011

«Мне нужно добавить клиента и пользователя, которые ссылаются на одного и того же человека»

Это не имеет смысла, поскольку клиент и пользователь не ссылаются начеловек, они являются человеком.Если у вас есть объект типа Customer и другой объект типа User, третьего идентификатора с именем Person не существует.Существует только два идентификатора, и оба имеют свойства, унаследованные от базового класса Person.

Если у вас есть такая ситуация в вашем домене, что человек может быть клиентом и пользователем одновременно, моделируя это с помощьюиерархия наследования не является идеальным подходом.В обоих классах лучше иметь ссылку на человека, например:

public class Person 
{
    public int Id {get;set;}
}

public class Customer
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int PersonId {get;set;}
    public Person Person {get;set;}
}

public class User
{
    public int Id {get;set;}
    public string Password {get;set;}
    public int PersonId {get;set;}
    public Person Person {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...