2012-05-21 30 views
0

使用EF代码首先我有了被关联到单个模型对象多个属性的模型对象:EF CodeFirst多FK协会单个模型对象

public class Job 
{ 
    public int Id { get; set; } 
    public int Company1Id { get; set; } 
    public int Company2Id { get; set; } // References CompanyId 
    public int Company3Id { get; set; } // References CompanyId 
    ... 

    public virtual Company Company1Info { get; set; } 
    public virtual Company Company2Info { get; set; } 
    public virtual Company Company3Info { get; set; } 
} 

public class Company 
{ 
    public int CompanyId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

关系在JobMap类

 this.HasRequired(t => t.Company1Info) 
      .WithMany() 
      .HasForeignKey(d => d.Company1Id); 
     this.HasRequired(t => t .Company2Info) 
      .WithMany() 
      .HasForeignKey(d => d.Company2Id); 
     this.HasRequired(t => t.Company3Info) 
      .WithMany() 
      .HasForeignKey(d => d.Company3Id); 
在我的回购

方法获取数据

public Job GetById(int id) 
    { 
     return _dbContext.Set<Job>() 
      .Include(t => t.Company1Info) 
      .Include(t => t.Company2Info) 
      .Include(t => t.Company3Info) 
      .First(x => x.Id == id); 
    } 

当我运行应用程序的COMPA ny2Info和Company3Info为空。我尝试在上下文中为每家公司设置一个新的DbSet实例,但我得到了Unsupported Exception

谢谢!

更新:这里是同一个问题的答案,但是这不是为我工作Entity Framework Code First - two Foreign Keys from same table

+0

你的意思是他们是空的?我没有看到任何代码来填充数据。 –

+0

@LeonCullens我更新了我的代码。 – Rich

回答

0

解决方案:

的设置我有我的问题,并在链接的解决方案是正确的。我创建实例的对象模型由于不存在的键而为空 - 换句话说,我试图引用的公司的Id不存在。

我做的唯一更改是添加WillCascadeOnDelete方法并将其设置为false,因为默认值为true - 注意我在JobMap类中使用Fluent API,而不是上下文模型构建器。

关系在JobMap类

this.HasRequired(t => t.Company1Info) 
     .WithMany() 
     .HasForeignKey(d => d.Company1Id) 
     .WillCascadeOnDelete(false); 
    this.HasRequired(t => t .Company2Info) 
     .WithMany() 
     .HasForeignKey(d => d.Company2Id) 
     .WillCascadeOnDelete(false); 
    this.HasRequired(t => t.Company3Info) 
     .WithMany() 
     .HasForeignKey(d => d.Company3Id) 
     .WillCascadeOnDelete(false); 

HTH