Код 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 (или столбца в базе данных) для сохранения состояния (Создано или Обновлено)). Но, опять же, может быть, вы пытаетесь что-то еще с этим.. Я думаю.

Другие вопросы по тегам