Составной ключ EF Core с отношениемC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Составной ключ EF Core с отношением

Сообщение Anonymous »

У меня есть следующие классы, показывающие, что одна учетная запись может иметь несколько профилей (упрощено для более легкого понимания):

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

public record ProfileId(string Value);
public record AccountId(string Value);
public record UserId(string Value);

public class Profile
{
private Profile() { }
private Profile(ProfileId id, UserId userId, Account account)
{
Id = id;
UserId = userId;
Account = account;
}

public ProfileId Id { get; private set; }
public UserId UserId { get; private set; }
public Account Account { get; private set; }
}

public class Account
{
private Account() { }
private Account(AccountId id, string name)
{
Id = id;
Name = name;
}

public AccountId Id { get; private set; }
public string Name { get; private set; }
private readonly List
 _profiles = new();
public IReadOnlyCollection Profiles =>_profiles.AsReadOnly();
}
Это код конфигурации типа сущности «Профиль»:

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

        builder.ToTable("profiles");
builder.HasOne(profile => profile.Account)
.WithMany(account => account.Members)
.HasForeignKey("account_id")
.IsRequired();
builder.Property(profile => profile.UserId)
.HasColumnName("user_id")
.IsRequired();
builder.HasKey("user_id", "account_id");
... а это для учетной записи:

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

        builder.ToTable("accounts");
builder.HasKey(account => account.Id);
Мне нужен составной ключ для профиля таблицы «user_id» и «account_id», но EF выдает эту ошибку.

Невозможно создать DbContext типа AppDbContext. Исключение «Свойство user_id» невозможно добавить к типу «Профиль», поскольку тип свойства не указан и нет соответствующего свойства или поля CLR. Чтобы добавить свойство теневого состояния, необходимо указать тип свойства». был выброшен при попытке создать экземпляр.

Я пробовал несколько вещей, но все они имеют странные побочные эффекты, такие как создание дополнительных теневых свойств. с дискриминаторами в именах, например:
Изображение
.. . когда вы пытаетесь сопоставить свойство UserId следующим образом (в отличие от приведенного выше):

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

        builder.Property("user_id")
.HasColumnName("user_id")
.IsRequired();
Как можно настроить сущность «Профиль» с помощью EF для достижения этой цели?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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