В моем приложении у меня есть две организации, в которых идентификатор объектов, представленных базой данных, являются ГИДС. Однако в коде я представляю эти идентификаторы как < /p>
Код: Выделить всё
readonly record struct ProjectId(Guid Value)
< /code>
и < /p>
readonly record struct ProjectTaskId(Guid Value)
При попытке запустить < /p>
Код: Выделить всё
dotnet ef migration
конкретная ошибка, которую я получаю, - это следующая: < /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; }
}
Я нашел этот другой вопрос, который кажется связанным, хотя между int и длинным типом. Эта проблема не такая же, но они похожи. Похоже, что смог найти конверт моего объекта /
Код: Выделить всё
AggrigateRoot
Другой вариант - не использовать значение для значения Я делаю в проектах, где они являются иностранными ключами, но это похоже на хакер и не является хорошим решением сделать долгосрочный.
Вопрос < /p>
Кто -нибудь знает, как обрабатывать преобразование между valueObject < /code> аналогично тому, что я описал, и идентификатором типа GUID (или технически любым другим типом)? Кто -нибудь знает о лучшем способе выполнения шаблона, который я пытаюсь сделать с ядром Ontity Framework? Возможно, я просто делаю это неправильно.
Подробнее здесь: https://stackoverflow.com/questions/793 ... bject-type