2016-06-15 5 views
1

У меня есть существующая база данных, которая позволяет сказать, что я не могу изменить. Одна из таблиц в этой базе данных имеют следующую структуру:Связь структуры объекта между столбцами разных типов

Table Foo 
FooKey   UNIQUEIDENTIFIER 
ParentFooKey VARCHAR(36) 

Таким образом, по существу, каждая строка может иметь отношение к его родителю в той же таблице.

Я пытаюсь сопоставить эти отношения, используя API-интерфейс API, но имеющий проблемы из-за разницы в типе между двумя столбцами.

Я попытался создать свойство в своем классе Foo, которое просто анализирует ParentFooKey в Guid, но когда я пытаюсь использовать это в Fluent API, я получаю сообщение об ошибке, потому что свойство не отображается в EF.

В качестве альтернативы есть способ нанести на карту ParentFooKey как руководство в EF? Значение в столбце ParentFooKey всегда представляет собой строковое представление GUID или NULL.

+1

В SQL столбцы внешних ключей должны иметь те же значения, так что, почему EF не позволила вам сделать this.If у вас есть эта проблема это означает, что вы проектируете вашу модель неправильно. Читайте немного о внешних ключах в SQL. – DespeiL

+0

Спасибо, я ценю это, но, к сожалению, модель старая, и я ее не проектировал. Отсюда и проблема. – Pseudo

ответ

1

Из того, что я знаю, вы не можете. Вы должны запросить то, что вам нужно, что-то вроде:

YourContext.YourDbSet.Where(x=>x.FooKey == parentKey) 

Также вы можете создать метод расширения для строки, чтобы преобразовать его в GUID, чтобы сделать вашу жизнь проще. Что-то вроде этого:

public Guid ToGuidOrDefault(this string s){ 
Guid guid = Guid.Empty; 
Guid.TryParse(s, out guid){ 
return guid; 

} 
+0

Это проблема ASP Identity, верно? :) – Alex

+0

Я думал, что это может быть так, но хотелось бы избежать этого, если это возможно, потому что этот способ означает создание отдельного вызова для каждой строки, возвращенной из 1Foo1. – Pseudo

+0

Вы можете ввести требование присоединения самостоятельно, поэтому EF создаст запрос соответствующим образом. Тем не менее, я не думаю, что вызов Guid.Parse будет переводиться в SQL. – DevilSuichiro