EF Core создает теневое свойство «Id1» при миграцииC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core создает теневое свойство «Id1» при миграции

Сообщение Anonymous »

У меня есть абстрактный класс Device. Он расширен двумя классами Machine и Line.
До миграции

Устройство имеет строковое свойство TenantId.
Миграция

Я представляю класс Tenant . У каждого устройства есть Тенант. Я меняю тип Device.TenantId со строки на int. Теперь это внешний ключ таблицы Tenant.
Вот код (классы и конфигурация контекста БД):

Код: Выделить всё

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

public int TenantId { get; set; }

public Tenant Tenant { get; set; } // Navigation property

Код: Выделить всё

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

public string Name { get; set; }

public List Devices { get; set; } = []; // Navigation property

public List Lines { get; set; } = []; // Navigation property

public List Machines { get; set; } = []; // Navigation property

Код: Выделить всё

modelBuilder.Entity(builder =>
{
builder.ToTable("Devices").HasKey(d => new { d.Id });
builder.HasDiscriminator(d => d.DeviceType)
.HasValue(DeviceType.Machine)
.HasValue(DeviceType.Line);

builder.HasOne(device => device.Tenant)
.WithMany(tenant => tenant.Devices)
.HasForeignKey(device => device.TenantId);
});

modelBuilder.Entity(builder =>
{
builder.HasBaseType();
builder.HasOne(m => m.Line)
.WithMany(dl => dl.Machines)
.HasForeignKey(m => m.LineId);

builder.HasOne()
.WithMany(tenant => tenant.Machines)
.HasForeignKey(device => device.TenantId);

});

modelBuilder.Entity(builder =>
{
builder.HasBaseType();

builder.HasOne()
.WithMany(tenant => tenant.Lines)
.HasForeignKey(device => device.TenantId);
});
Проблема

Когда я создаю миграцию, выводится:

Код: Выделить всё

The foreign key property 'Device.TenantId1' was created in shadow state because a conflicting property with the simple name 'TenantId' exists in the entity type, but is either not mapped, is already used for another relationship, or is incompatible with the associated primary key type. See https://aka.ms/efcore-relationships for information on mapping relationships in EF Core.
Затем он меняет тип столбца TenantId с text на int (правильный), но также добавляет новый столбец:

Код: Выделить всё

migrationBuilder.AlterColumn(
name: "TenantId",
table: "Devices",
type: "integer",
nullable: false,
defaultValue: 0,
oldClrType: typeof(string),
oldType: "text",
oldNullable: true);

migrationBuilder.AddColumn(
name: "TenantId1",
table: "Devices",
type: "integer",
nullable: true);
Я ожидаю, что TenantId1 не понадобится. Я не знаю, почему EF добавляет его, и не знаю, как от него избавиться.
Я потерялся в этом вопросе, я работал над этой проблемой несколько раз. уже несколько часов, но я не могу найти решение.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -migration
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • EF Core 8 больше не создает файлы миграции
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core ToView все еще создает таблицу в процессе миграции
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core ToView все еще создает таблицу в процессе миграции
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core ToView все еще создает таблицу в процессе миграции
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core ToView все еще создает таблицу в процессе миграции
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»