我有一个复杂的数据模型,我需要在同一个表中有两个指向不同记录的外键。在我的示例中,我有一个客户端表,我正在尝试跟踪哪些员工记得创建与修改记录。我的对象设置如下:
using System;
using System.Collections.Generic;
public partial class shgt_WfClient
{
public int wfClientId { get; set; }
public string SearchName { get; set; }
public string FirstName { get; set; }
public System.DateTime Created { get; set; }
public int CreatedBy { get; set; }
public System.DateTime Modified { get; set; }
public int ModifiedBy { get; set; }
public virtual tblStaff tblStaffCreatedBy { get; set; }
public virtual tblStaff tblStaffModifiedBy { get; set; }
}
我的控制器有一个非常基本的设置:
[Breeze.WebApi2.BreezeController]
public class BreezeController : ApiController
{
readonly Breeze.ContextProvider.EF6.EFContextProvider<Models.DataEntities> _contextProvider = new Breeze.ContextProvider.EF6.EFContextProvider<Models.DataEntities>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<Models.shgt_WfClient> WfClient()
{
return _contextProvider.Context.shgt_WfClient;
}
当使用$ expand时,我总是得到tblStaffCreatedBy,即使我指定了tblStaffModifiedBy。如果我试图获得两者,我只会得到tblStaffCreatedBy。这是一个错误,你不能有多个外键引用同一个表?如果是这样,这将是一个相当大的破坏,因为我使用的一些复杂的企业数据库可以通过外键将多个连接返回到同一个表。我会注意到我首先使用数据库在EF中使用Diagram而不是首先使用代码。
我已经测试并验证我的模型已通过C#代码在EF中正确连接:
List<Models.shgt_WfClient> clients = (db.shgt_WfClient.Include("tblStaffModifiedBy").Include("tblStaffCreatedBy").Where(a => a.wfClientId == 1)).ToList();
-Costoda