Наличие двух классов, представляющих одну и ту же таблицу в Entity Framework? - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь очистить некоторые контексты данных Entity Framework, которые были изначально созданы без каких-либо соглашений об именах. Я хотел бы сохранить старые классы, но при этом иметь новый, правильно названный класс, доступный в то же время, чтобы все другие проекты, использующие эти контексты данных, не нуждались в немедленном изменении. Я буду отмечать старый класс как устаревший, используя аннотации данных, чтобы они не использовались ни при каких новых разработках. Будут изменены только классы, база данных останется с плохим именованием на вечность.

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

Типы сущностей «Клиент» и «lu_Clients» не могут совместно использовать таблицу «lu_Clients», поскольку они не находятся в одной иерархии типов или не имеют действительного отношения внешнего ключа один к одному с соответствующими первичными ключами между ними.

Мой уродливый класс:

[Obsolete("Use Client class instead")]
public class lu_Clients
{
    [Key]
    [Column("ClientsSeq")]
    public int ClientsSeq { get; set; }

    [Column("ClientsID")]
    public string ClientsID { get; set; }

    [Column("ClientsName")]
    public string ClientsName { get; set; }
}

Мой очищенный класс:

[Table("lu_Clients")]
public  class Client
{
    [Key]
    [Column("ClientsSeq")]
    public int Sequence { get; set; }

    [Column("ClientsID")]
    public string Id { get; set; }

    [Column("ClientsName")]
    public string Name { get; set; }
}

Есть какие-нибудь предложения о том, как заставить два класса работать с одной и той же концепцией таблицы? Или есть лучший способ сохранить совместимость с устаревшим и новым?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Зачем вам нужно держать оба?Я бы переименовал каждое поле в старом классе, чтобы оно соответствовало новому классу (используйте функцию переименования VS, чтобы убедиться, что все действительные поля переименованы), затем переименуйте старое имя класса в новое имя класса (что приведет к конфликтам), но затем удалитестарый класс.Теперь весь код использует новый класс, а старый класс не существует.

1 голос
/ 23 апреля 2019

Не могли бы вы сделать так, чтобы новый класс наследовал из таблицы, а затем измените lu_clients, чтобы он наследовал непосредственно от класса клиентов, вместо этого, эффективно отображая через новый класс, пока старый уродливый класс больше не нужен?

...