Приведение внешнего ключа в EF CoreC#

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

Сообщение Anonymous »

У меня есть пара связанных объектов, которые связаны вторичным ключом разного типа, и я пытаюсь связать эти объекты вместе.
По сути, я есть что-то вроде:

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

public class A
{
Guid PK { get; set; }

// is an internal and external key so generically typed
string ReferenceKey { get; set; }

ICollection RelatedClassBObjs {get;set;} // this can be null
}

public class B
{
int Key { get; set }

A RelatedClassAObj { get; set; }
}
ReferenceKey класса A иногда является ссылкой на ключ класса B и поэтому является int, но в других случаях это может быть внешняя ссылка и поэтому может быть что угодно, от GUID до случайной строки.
Я пытаюсь связать два класса с помощью Fluent API, делая что-то вроде

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

modelBuilder.Entity(entity => {
... //Property set up omitted
entity.HasOne(e => e.RelatedClassAObj)
.WithMany(d=>d.RelatedClassBObjs)
.HasForeignKey(e=>e.Key)
.HasPrincipalKey(d => d.ReferenceKey);
});
И у меня также настроен альтернативный ключ для класса A

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

modelBuilder.Entity(entity => {
entity.HasKey(e => e.PK)
.HasName("PRIMARY");
entity.HasAlternateKey(e => e.ReferenceKey )
.HasName("reference_key");
... // extra setup omitted
});
При такой настройке сгенерированный SQL-код соединения выглядит следующим образом:

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

JOIN B b ON b.Key = a.ReferenceKey
Однако это, похоже, пытается преобразовать/прочитать строку ReferenceKey как целое число, а затем взрывается, когда присутствует нецелое число. В SQL это, кажется, можно исправить, добавив приведение к строке вокруг b.Key

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

JOIN B b ON CAST(b.Key as string) = a.ReferenceKey
Но я не могу найти способ получить свободный API для этого. У меня нет контроля ни над базами данных, ни над запросами Linq (модель используется HotChocolate, поэтому у меня нет прямого контроля Linq/SQL).
Любая помощь будет очень полезна. оценил.

Подробнее здесь: https://stackoverflow.com/questions/785 ... in-ef-core
Ответить

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

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

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

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

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