2012-02-10 155 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