我使用 EF-database-first 创建了一个 MVC4 Web 应用程序。这些表具有复合键 [ID、Name、EffDate],并且没有在数据库中定义外键:例如,Department 部分类:
[MetadataType(typeof(DepartmentMetadata))]
public partial class Department
{
public int DeptID { get; set; }
public string DeptName { get; set; }
public System.DateTime EffDate { get; set; }
public string Status { get; set; }
public string RevenueAccount { get; set; }
}
部门元数据类:
public class DepartmentMetadata
{
[Required]
public int DeptID { get; set; }
[Required]
[Display(Name = "Department Name")]
public string DeptName { get; set; }
[Required]
[Display(Name = "Effective Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", NullDisplayText = "--", ConvertEmptyStringToNull = true)]
public System.DateTime EffDate { get; set; }
[Required]
public string Status { get; set; }
[Display(Name = "Revenue Account")]
[StringLength(10)]
public string RevenueAccount { get; set; }
}
分配表,指的是部门表。它还有一个复合键 [DeptID, ProjectID, BillableUnitID, EffDate]。如果可以的话,我会将 DeptID 字段声明为外键......但我不控制数据库,更重要的是我相信 T-SQL 不会允许外键成为复合键的一部分:
[MetadataType(typeof(AllocationMetadata))]
public partial class Allocation
{
public int DeptID { get; set; }
public int ProjectID { get; set; }
public int BillableUnitID { get; set; }
public System.DateTime EffDate { get; set; }
public string Status { get; set; }
public decimal Allocation1 { get; set; }
}
这可行,但我得到一列 DeptID 编号。我想要的是一列部门名称。
上一个问题将我引导到虚拟导航属性,所以我添加了它们:
[MetadataType(typeof(AllocationMetadata))]
public partial class Allocation
{
[ForeignKey("Department")]
public int DeptID { get; set; }
public int ProjectID { get; set; }
public int BillableUnitID { get; set; }
public System.DateTime EffDate { get; set; }
public string Status { get; set; }
public decimal Allocation1 { get; set; }
public virtual Department Department { get; set; } /* navigation property */
}
AllocationController 中 Index 的代码是: public ActionResult Index() { return View(db.Allocation.Include(a => a.Department).ToList()); }
当我单击分配索引视图的链接时,我收到此错误消息(在我停止调试之后):
“/”应用程序中的服务器错误。
指定的包含路径无效。EntityType 'KC_BillableUnit_TESTModel.Allocation' 未声明名为“Department”的导航属性。
堆栈跟踪 [InvalidOperationException:指定的包含路径无效。EntityType 'KC_BillableUnit_TESTModel.Allocation' 未声明名为 'Department' 的导航属性。]
System.Data.Objects.Internal.ObjectFullSpanRewriter.ConvertSpanPath(SpanPathInfo parentInfo, List`1 navPropNames, Int32 pos) +8355128
System.Data。 Objects.Internal.ObjectFullSpanRewriter..ctor(DbCommandTree 树,DbExpression toRewrite,Span span)+256 ....继续....
我尝试了各种注释组合,但都导致相同的错误。
如何让我的分配列表显示部门名称而不是 DeptID 编号?