2013-01-11 2 views
0

Вот подстава пример:Как использовать свойство навигации Entity Framework с MySqlConnector, если некоторые из клавиш навигации имеют значение NULL?

public class Car 
{ 
public int CarId { get; set; } 
public int? PreviousOwnerId { get; set; } 
public PreviousOwner PreviousOwner { get; set; } 
} 

public PreviousOwner 
{ 
public int PreviousOwnerId { get; set; } 
public string Name { get; set; } 
} 

, а затем запрос:

var cars = db.Cars.Where(c => c.PreviousOwner.Name = "Stack").ToList(); 

Однако я получаю сообщение об ошибке, потому что некоторые автомобили имеют нулевое PreviousOwnerId. Внутреннее исключение составляет "Unknown column 'Extent1.PreviousOwnerId' in 'where clause'".

Примечание: Это используется разъем .net MySQL

ответ

-1

вопрос вы здесь является то, что навигационное свойство не появляется, чтобы иметь достаточно информации о конфигурации. (например, configbuilder конфигуратора или атрибута), который требуется при использовании нестандартных имен для PK/Fks. Я рекомендую прочитать мою статью о том, как свойства навигации работают здесь: http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

Я полагаю, вы будете нуждаться в что-то вроде следующего (например, использует ModelBuilder):

modelBuilder.Entity<Car>().HasOptional(c=>c.PreviousOwner).WithMany().HasForeignKey(c=>c.PreviousOwnerId); 
+0

Я добавил это к моему onmodelcreating: 'MODELBUILDER. Объект () .HasOptional (c => c.PreviousOwner); 'и по-прежнему имеет ту же ошибку. –

+0

Такая же ошибка с сделанным вами изменением. Возможно, это потому, что это строго от 1 до 1 (а не от 1 до многих). –

+0

@travisj взгляните на свою фактическую базу данных. Я представляю, что FK будет выглядеть примерно так: PreviousOwner_PreviousOwnerId, если это так, переименуйте его в PreviousOwnerId или восстановите/перенесите свою базу данных. –

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