Организация основных отношений с иностранным ключомC#

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

Сообщение Anonymous »

проблема/контекст
В моем приложении у меня есть две организации, в которых идентификатор объектов, представленных базой данных, являются ГИДС. Однако в коде я представляю эти идентификаторы как < /p>

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

readonly record struct ProjectId(Guid Value)
< /code>
и < /p>
readonly record struct ProjectTaskId(Guid Value)
Цель этого заключается в том, что в моей системе и переднем конце эти гииды предварительно профиксированы с помощью project_ {wud} и task_ {guid} Таким образом, когда кто -то звонит Мой API, я знаю, каков фактический тип, и может обеспечить его на протяжении всего приложения. < /p>
При попытке запустить < /p>

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

dotnet ef migration 
Для этого проекта он не работает, потому что EF Core видит значение корабля по отношению к иностранным ключам между Project и ProjectTask как guid и projectId < /code> соответственно. < /p>
конкретная ошибка, которую я получаю, - это следующая: < /p>

Исключение 'the types Свойств, указанных для иностранного ключа {'usdesedProjectId': projectId} на типе объекта 'ProjectTask' не соответствует типам свойств в основном ключе {'id': GUID} на тип объекта 'Project'
< /blockquote>
У меня есть отношение, определенное следующим образом: < /p>

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

public class TenantIdValueConverter : ValueConverter
{
public TenantIdValueConverter()
: base(
v => v.Value,
v => new TenantId(v))
{
}
}

/** in the DbContext **/

protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder
.Properties()
.HaveConversion();
configurationBuilder
.Properties()
.HaveConversion();
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(p => p.ProjectTasks)
.WithOne(pt => pt.Project)
.HasForeignKey(pt => pt.AssignedProjectId)
.HasPrincipalKey(p => p.Id)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
}
< /code>
public abstract class Entity
{
public Guid Id { get; }
}

public abstract class AggregateRoot : Entity
{
protected AggregateRoot(Guid id) : base(id)
{
}
}

public class Project : AggregateRoot
{
public HashSet ProjectTasks { get; private set; } = [];
}

public class ProjectTask : Entity
{
public Project Project { get; set; } = null!;
public ProjectId AssignedProjectId { get; set; }
}
Эффективное ядро ​​предприятия не знает, как справиться с этими отношениями, так как с одной стороны у меня есть GUID, а с другой - у меня есть ProjectId . Несмотря на то, что у меня есть их на карту с GUID с использованием конвертера значений, не кажется, что они удостоены чести за внешний ключ. >
Я нашел этот другой вопрос, который кажется связанным, хотя между int и длинным типом. Эта проблема не такая же, но они похожи. Похоже, что смог найти конверт моего объекта /

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

AggrigateRoot
абстрактные классы, позволяющие обеспечить общий первичный ключ, чтобы тип мог быть ProjectId, ProjectTaskID и или любой другой типы идентификаторов, которые у меня есть. Это было бы довольно большим обновлением, поэтому я стараюсь избежать этого в данный момент, но это кажется действительной опцией. < /P>
Другой вариант - не использовать значение для значения Я делаю в проектах, где они являются иностранными ключами, но это похоже на хакер и не является хорошим решением сделать долгосрочный.
Вопрос < /p>
Кто -нибудь знает, как обрабатывать преобразование между valueObject < /code> аналогично тому, что я описал, и идентификатором типа GUID (или технически любым другим типом)? Кто -нибудь знает о лучшем способе выполнения шаблона, который я пытаюсь сделать с ядром Ontity Framework? Возможно, я просто делаю это неправильно.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Организация основных отношений с иностранным ключом
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • .Net Framework & Entity Framework: не сохранение вложенной коллекции организации, связанной с иностранным ключом
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Неверное состояние модели с иностранным ключом
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Неверное состояние модели в онпосте с иностранным ключом
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Неверное состояние модели в онпосте с иностранным ключом
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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