2016-07-18 2 views
0

Мне было предложено изменить существующее приложение, которое передает объект объекта EF обратно с бизнес-уровня, отображаемого в интерфейсе. В нескольких местах есть записи, в которых OfficeCode регистрируется в базе данных в виде строки. Мне было предложено в интерфейсе теперь отобразить имя Office для некоторых из этих записей. Ниже приведен фрагмент этих моделей.Сопоставление первого свойства кода объекта с другой таблицей

public class Office 
{ 
    [Key] 
    public string OfficeCode { get; set; } 

    public string OfficeName { get; set; } 

    // Many more properties 
} 

public class Note 
{ 
    [Key] 
    public int Id { get; set; } 

    public string OfficeCode { get; set; } // Not a ForeignKey, I didn't create the database 

    public string OfficeName { get; set; } // Can we pull this from the Office table? 
} 

Я думал, что я мог бы быть в состоянии использовать Entity Нарезка, но я получаю сообщение об ошибке

Типы сущностей «Офис» и «Примечание» не может разделять таблицы «Управление», потому что они не находятся в той же или не имеют действительной связи один к одному из внешних ключей с соответствующими первичными ключами между ними.

Есть ли способ заполнить свойство из другой таблицы, если между таблицами нет отношения ForeignKey?

Может кто-нибудь подумать об изящном способе отображения OfficeName в заметках без серьезного подбора стека.

ответ

0

Вы можете использовать концепцию перехватчиков EF. IDbCommandInterceptor позволяет вам модифицировать инструкцию SQL перед выполнением и изменением результатов после выполнения.

Вы должны передать параметр (OfficeCode) к вашему перехватчик и затем изменить запрос SQL вручную (.... из ОФИСА Где Note.OfficeCode = Office.OfficeCode)

http://xabikos.com/2014/11/18/Create-a-multitenant-application-with-Entity-Framework-Code-First-Part-2/

я не знаете, почему вы пытаетесь сделать так, чтобы ваша жизнь была настолько сложной. Вы заметили, что EF не нравится ваше определение данных. Может быть, вы посмотрите, как использовать сложные типы или TPH, и оба объекта имеют один и тот же базовый столбец, это будет более легко.

+0

Я не пытаюсь усложнить свою жизнь, я столкнулся с существующим приложением. Обычно я бы выбрал объекты DTO из IQueriable, я бы никогда не гидратировал объекты Entity. Я мог бы просто создать связь между Note и Office и включить Office, но тогда у меня был бы сложный объект Office, 40+ свойств, прикрепленный к каждой заметке ради одного свойства имени. –

Смежные вопросы