Получить значение внешнего ключа в Entity Framework 1.0 без метода Include - PullRequest
2 голосов
/ 07 июля 2011

Я использую VS2008 (.NET 3.5) и Entity Framework поверх SQL Server.Я надеюсь получить значение столбца внешнего ключа без использования метода Include() для связывания таблицы.

Например, простой автор имеет много книг.

var book = context.Books.First();
int authorId = book.Author.AuthorId;

В этом случае выдается исключение, потому что Author имеет значение null.Я просто хочу получить идентификатор автора, но мне не нужен остальной объект Author.В классе Book нет свойства * 1007.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Я видел упомянутое несколько мест, и это может стоить посмотреть.

Метод расширения:

public static TValue GetId<TValue>(this EntityReference reference)
{
     if (reference == null)
     {
        return default(TValue);
     }

     EntityKey key = reference.EntityKey;
     if (key != null)
     {
         EntityKeyMember[] entityKeys = key.EntityKeyValues;
         if (entityKeys.Length > 0)
         {
            return (TValue)entityKeys[0].Value;
         }
     }

     return default(TValue);
}

В частичном классе для вашей сущности Book:

public int AuthorId
{
   get { return AuthorReference.GetId(); }
}
1 голос
/ 07 июля 2011

Вы можете получить значение FK, но оно не так просто. Каждое ваше свойство навигации, представляющее одну сущность, должно иметь свое свойство pair, называемое XXXReference. В вашем случае AuthorReference. Это свойство Est Infrasturcture, хранящее ваш ключ внутри. Вы можете использовать аналогичный код для получения значения FK:

EntityKey key = book.AuthorReference.EntityKey;
EntityKeyMembers[] keyMembers = key.EnityKeyValues;
// Now each member of this array contains Key and Value property. Key is the name of 
// primary key property in principal entity and value is its value
// If you don't have composite keys and your keys are integer you can simply use:
int authorId = (int)keyMembers[0].Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...