2013-07-24 85 views
0

型號:實體框架:試圖查詢一個實體與外鍵關係

public class User 
{ 
    public int Id {get; set;} 
    public int SomeProperty {get; set;} 
    public virtual Group Group { get; set; } 
} 

public class Group { 
{ 
    public int Id {get; set;} 
    // other properties 
} 

運行此LINQ查詢:

myContext.Users.Where(u => u.SomeProperty = 4); 

得到這個SQL查詢:

select 
    extent1.Id as Id 
    extent1.SomeProperty as SomeProperty 
    extent1.Group_Id as Group_Id 
from 
    dbo.Users as extent1 

這是奇怪的是,它決定不像駱駝那樣對其他財產進行協會專欄。這有什麼理由嗎?

在任何情況下,我加入映射代碼,試圖解決這個問題:

var entity = modelBuilder.Entity<User>(); 
entity.HasRequired(a => a.Group) 
    .WithRequiredDependent() 
    .Map(a => a.MapKey("GroupId")); 

不幸的是,LINQ查詢產生的查詢:

select 
    extent1.Id as Id 
    extent1.SomeProperty as SomeProperty 
    extent1.GroupId as GroupId 
    extent1.Group_Id as Group_Id 
from 
    dbo.Users as extent1 

它看起來好一點,但顯然沒有按因爲我的表有GroupId列而不是Group_Id,所以還是不行。有誰知道這裏發生了什麼或如何解決它?

+0

請看這個請:http://stackoverflow.com/a/5995211/2524304 – FSou1

+0

'用戶 - 組'1:1?這聽起來像n-1。 –

+0

一個組有許多用戶。用戶只能屬於一個組。 – Jordan

回答

1

由於映射User-Group爲n - 1個映射應該是:

var entity = modelBuilder.Entity<User>(); 
entity.HasRequired(a => a.Group)   // user has one Group 
     .WithMany()       // Group has many Users 
     .Map(a => a.MapKey("GroupId")); 

EF創建Group_Id柱本身的1-N關聯它從你的類模型推斷,而GroupId是因爲添加你自己映射的1:1關聯。

0

或者你可以把它寫成遵循

public class User 
{ 
    public int Id {get; set;} 
    public int SomeProperty {get; set;} 

    [ForeignKey("Group")] 
    public int GroupId {get;set;} 
    public virtual Group Group { get; set; } 
} 

分組ID cloumn是當沒有定義外鍵屬性自動創建。