2013-01-11 43 views
0

下面是一個簡單的設置:如何在某些導航鍵可爲空時使用MySqlConnector實體框架導航屬性?

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

你這裏的問題是,這並不出現在您的導航屬性有足夠的配置信息。 (如modelbuilder配置或屬性配置),這是使用PK/FKS的非標準名稱時所需的。我建議你閱讀我的文章導航屬性如何在這裏工作:http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

我想你也將需要類似下面(例如使用模型構建器):

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

我將此添加到我的onmodelcreating:'模型構建器。 Entity ().HasOptional(c => c.PreviousOwner);'仍然有同樣的錯誤。 –

+0

與您所做的修改相同的錯誤。也許是因爲這是嚴格的1比1(而不是1比1)。 –

+0

@travisj看看你的實際數據庫我想象的FK將看起來像PreviousOwner_PreviousOwnerId,如果是這種情況將其重命名爲PreviousOwnerId或regen /遷移你的數據庫 –