Код Entity Framework Первое наследование TPH - могут ли разные дочерние классы совместно использовать поле?
У меня есть Entity Framework Model, созданная с использованием Entity Framework Code First, которая использует наследование таблиц в иерархии, где структура выглядит примерно так:
public abstract class BaseState
{
public int Id { get; set; }
public string StateName { get; set; }
// etcetera
}
public class CreatedState : BaseState
{
public User Owner { get; set; }
}
public class UpdatedState : BaseState
{
public User Owner { get; set; }
}
Теперь, что это создает в моем BaseStates
стол у меня есть Owner_Id
а также Owner_Id1
сохраняются. Но, учитывая, что ни один класс не будет одновременно CreatedState
и UpdatedState
кажется, что было бы логично использовать один Owner_Id
для обоих. Что также облегчило бы отслеживание базы данных.
Мой основной вопрос: это возможно с Code First EF4?
Я попытался сопоставить столбцы:
public class CreatedState : BaseState
{
[Column("OwnerId")]
public User Owner { get; set; }
}
public class UpdatedState : BaseState
{
[Column("OwnerId")]
public User Owner { get; set; }
}
Это, казалось, не имело никакого эффекта.
Затем я попытался создать общий родительский класс, который в любом случае, вероятно, является более правильным:
public abstract class OwnedState : BaseState
{
public User Owner { get; set; }
}
public class CreatedState : OwnedState
{
}
public class UpdatedState : OwnedState
{
}
Опять не игра в кости. Или, что еще более тревожно, в некоторых случаях это работает, а в других - нет (очевидно, моя реальная конфигурация немного сложнее), когда я точно не вижу разницы между классами, в которых она работает.
Отредактируйте для более подробной информации о том, что не получается: у меня есть два поля, которые ведут себя так, как я описал выше, мы могли бы вызвать связанные классы OwnedState
а также ActivityState
оба из которых я создал как абстрактный класс, как показано в моем последнем примере. OwnedState
имеет два класса, которые вытекают из него, ActivityState
имеет три В базе данных у меня есть ActivityState_Id
но также OwnedState_Id
а также OwnedState_Id1
,
Я не вижу никакой разницы между OwnedState
а также ActivityState
классы, кроме типа, на который они ссылаются (оба других объекта), и все же в базе данных кажется, что EF как-то интерпретирует их по-разному - я недостаточно хорошо понимаю внутренности EF, чтобы знать, как он принимает это решение.
1 ответ
Если вы хотите, чтобы один Owner_ID имел ссылки как CreatedState, так и updatedState, то Владелец пользователя должен быть помещен в BaseState.
Я не знаю, что вы пытаетесь сделать с этим, но логично, что вы не будете иметь CreatedState и Обновлено State в качестве классов, но больше значений свойства State (или столбца в базе данных) для сохранения состояния (Создано или Обновлено)). Но, опять же, может быть, вы пытаетесь что-то еще с этим.. Я думаю.