2011-01-25 70 views
1

现有的SQL Server表.INCLUDE部队EF扔序列不包含任何元素

两个测试:

呼叫这一个:

[Test] 
    public void AssertAccessPolicyWithIdAndChecksum() 
    { 
     var pol = Repo.GetPolicyFlightStatus(aut_id: 44544, checksum: "QXSDENY"); 
     Assert.NotNull(pol); 
    } 

调用此一架B

[Test] 
    public void AssertGetFriendlyPolicy() 
    { 
     var lineRepo = new tbl_StatusRepository(); 
     var pol = Repo.GetPolicyFlightStatus(aut_id: 44544, checksum: "QXSDENY"); 
     Assert.AreEqual("With Underwriter", pol.tbl_Status.txt_friendlyName); 
     Assert.AreEqual("WC/Longshore", pol.tbl_Line.txt_friendlyName); 
    } 

型号:

public partial class tbl_Policy 
{ 
    [Key] 
    public int aut_id { get; set; } 
    [ForeignKey("tbl_Status")] 
    public int int_statusID { get; set; } 
    public virtual tbl_Status tbl_Status { get; set; } 
    [ForeignKey("tbl_Line")] 
    public int int_lineID { get; set; } 
    public virtual tbl_Line tbl_Line { get; set; } 
} 

public class tbl_Status 
{ 
    [Key] 
    public int aut_id { get; set; } 
    public string txt_status { get; set; } 
    public string txt_friendlyName { get; set; } 
    public virtual tbl_Policy tbl_Policy { get; set; } 
} 

public class tbl_Line 
{ 
    [Key] 
    public int aut_id { get; set; } 
    public string txt_Line { get; set; } 
    public string txt_friendlyName { get; set; } 
    public virtual tbl_Policy tbl_Policy { get; set; } 
} 

当运行

 internal static tbl_Policy GetPolicyFlightStatus(int aut_id, string checksum) 
    { 
     if (Transcoder.Transcode(aut_id) == checksum) 
     { 
      var ctx = new LIGDataContext(); 
      return ctx.tbl_Policy.Include("tbl_Line").Include("tbl_Status").Single(f => f.aut_id == aut_id); 
     } 
     return null; 
    } 

种皮传递 TESTB抛出异常上第一断言线


添加包括用于子表

internal static tbl_Policy GetPolicyFlightStatus(int aut_id, string checksum) 
    { 
     if (Transcoder.Transcode(aut_id) == checksum) 
     { 
      var ctx = new LIGDataContext(); 
      return ctx.tbl_Policy.Include("tbl_Line").Include("tbl_Status").Single(f => f.aut_id == aut_id); 
     } 
     return null; 
    } 

试验A和试验B投掷 LIG2010RedesignMVC3。 LIGMVC2010FlightTrackerT ests.AssertAccessPolicyWithIdAndChecksum: System.InvalidOperationException:序列不包含任何元素


LIG2010RedesignMVC3.LIGMVC2010FlightTrackerTests.AssertGetFriendlyPolicy: System.InvalidOperationException:序列不包含任何元素

回答

1

有在你的对象模型的一些问题。基本上,你正试图建立与外键的1:1关联,而代码首先并不真正支持这种情况。因此,它将所有关联转换为共享主键关联,并且tbl_Policy上的所有外键都不会成为数据库中的外键。首先,您需要修复您的模型,因为这可能会在运行时导致大量异常。

目前,AR两种方式来映射1:在代码优先1协会:
1. Shared Primary Key Associations
2. One-to-One Foreign Key Associations

,看看哪一个更好地描述你的域模型,我可以改变你的对象模型匹配。

+0

我试图做一个一对多所以这就是一些帮助,现在我只需要弄清楚为什么我的映射仍然是错误的 – MarkKGreenway 2011-01-25 05:19:11

1

我也有我的造型(信用返工莫尔塔扎但我想在这里为我的记录

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<tbl_Line>() 
      .HasMany(d => d.tbl_Policy) 
      .WithRequired(c => c.tbl_Line) 
      .HasForeignKey(c => c.int_lineID); 
     modelBuilder.Entity<tbl_Status>() 
      .HasMany(d => d.tbl_Policy) 
      .WithRequired(c => c.tbl_Status) 
      .HasForeignKey(c => c.int_statusID); 
    } 
+0

很高兴你知道这一点,让我知道你是否对此有任何疑问。 – 2011-01-25 17:53:17

相关问题