2011-06-27 68 views
5

我有以下两个实体(其中许多,但这些给我的问题)EF 4.1代码第一次外键增加了额外的列

public class StartPoint 
{ 
    public int StartPointId { get; set; } 
    public string Description { get; set; } 
    public int StartPointNumber { get; set; }  
    public int StartAreaId { get; set; } 
    public StartArea StartArea { get; set; } 
}  

public class StartArea 
{ 
    public int StartAreaId { get; set; } 
    public string Description { get; set; } 
    public ICollection<StartPoint> StartPoints { get; set; } 
} 

让EF创建当我的它抱怨说,我需要关闭级联删除,因为多个路径,我做了如下。

 modelBuilder.Entity<StartPoint>() 
      .HasRequired(x => x.StartArea) 
      .WithMany() 
      .HasForeignKey(x => x.StartAreaId) 
      .WillCascadeOnDelete(false); 

的问题是,当数据库中创建我得到两个外键,一个被称为StartAreaId,正如我所期望的,另一种是StartArea_StartAreaId。仅使用StartAreaId。为什么以及如何摆脱StartArea_StartAreaId。如果我删除上下文中的HasForeignKey并从实体中删除StartAreaId,我会得到多个StartArea_StartAreaId列,如StartArea_StartAreaId和StartArea_StartAreaId1。我需要做些什么来阻止这种情况的发生?我只想将StartAreaId作为我的外键。

回答

3

的问题是空WithMany

modelBuilder.Entity<StartPoint>() 
     .HasRequired(x => x.StartArea) 
     .WithMany(y => y.StartPoints) 
     .HasForeignKey(x => x.StartAreaId) 
     .WillCascadeOnDelete(false); 
+0

是啊,当然了,不知道为什么我没有想到这一点。谢谢。 – Dirk

+1

谢谢拉迪斯拉夫!受益于你的许多答案,包括这一个。只有观察,这个问题是间歇性的(我的同事并没有被迫提供WithMany中的任何东西,但是我必须......(你应该得到EF上的MVP :)) –