2012-02-10 223 views
1

我有這樣的問題:實體框架問題

有兩個entyties具有一一對應的關係,它們的啓動具有相同的ID列名

 
    Document_head    sales_Order 
+-----------------+   +------------------+ 
+ DocumentId  +   + DocumentId  + 
+ Person   + 1-----1 + OrderDate  + 
+ Status   +   + Purchaser  + 
+ ...    +   + ...    + 
+ ----------------+   +------------------+ 

下面是實體定義

public partial class Document_head 
{ 

    public Document_head() 
    { 
     // Other 
    } 
    [Key] 
    public string DocumentId {get;set;} 
    public int PersonId {get;set;} 
    public int status {get;set;} 

    [ForeignKey("DocumentId")] 
    public virtual sales_Order sales_Order { get; set; } 
} 


public partial class sales_order 
{ 
    public sales_order() 
    { 
     //Other 
    } 
    [Key] 
    public string DocumentId { get; set; } 

    public virtual Document_head Document_head { get; set; } 
} 

這裏是背景

public class MyContext : DbContext 
{ 
    public DbSet Document_head Document_head{ get; set; } 
    public DbSet<sales_order> sales_order{ get; set; } 

    modelBuilder.Entity<Document_head>() 
     .HasOptional(p => p.sales_order).WithRequired(); 
    modelBuilder.Entity<sales_order>() 
     .HasRequired(p => p.Document_head).WithOptional(); 
} 

問題是運行MVC3應用程序時。

它說:

列名 「Document_Head_DocumentId」 是無效的。

我花了很多時間在這種情況下,如果有人可以幫助我這個..將不勝感激。

回答

2

更改配置如下。您只需要單個配置行,並且應該包含兩個導航字段。

public class MyContext : DbContext 
{ 
    public DbSet Document_head Document_head{ get; set; } 
    public DbSet sales_order{ get; set; } 

    modelBuilder.Entity‹sales_order›().HasRequired(p => p.Document_head) 
     .WithOptional(p => p.sales_order); 
} 
+0

+1對此答案,我強烈建議您使用流暢的api而不是數據註釋,因爲前者具有更多的功能。 – Oybek 2012-02-10 12:27:15

+0

很快你的答案.....我做了更改..但問題仍然存在......爲什麼:public DbSet sales_order {get;組; }而不是公共DbSet <sales_order> sales_order {get;組; } – 2012-02-10 13:27:30

+0

@JuanPabloGomez它不清楚你對評論的看法。你能否更新你的問題 – Eranga 2012-02-10 14:20:01