将实体代码第一个属性映射到另一个表

时间:2016-07-18 06:11:04

标签: c# entity-framework

我被要求修改现有的应用程序,该应用程序从前端显示的业务层返回EF实体对象。在一些位置,有一些记录将OfficeCode作为字符串记录在数据库中。我在前端已被要求现在显示其中一些记录的OfficeName。以下是这些模型的片段。

public class Office
{
    [Key]
    public string OfficeCode { get; set; }

    public string OfficeName { get; set; }

    // Many more properties
}

public class Note
{
    [Key]
    public int Id { get; set; }

    public string OfficeCode { get; set; } // Not a ForeignKey, I didn't create the database

    public string OfficeName { get; set; } // Can we pull this from the Office table?
}

我以为我可以使用Entity Splitting但是我收到了错误消息

实体类型' Office'和#39;注意'不能分享桌子' Office'因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,并且它们之间具有匹配的主键。

如果表之间没有ForeignKey关系,是否有办法从另一个表填充属性?

有人可以想到一种优雅的方式来在Notes中显示OfficeName而不需要重新填充堆栈。

1 个答案:

答案 0 :(得分:0)

您可以使用EF的Interceptors概念。 IDbCommandInterceptor允许您在执行之前修改SQL语句,并在执行后修改结果。

您必须将参数(OfficeCode)传递给Interceptor,然后手动修改sql查询(....从Office Where Note.OfficeCode = Office.OfficeCode)

http://xabikos.com/2014/11/18/Create-a-multitenant-application-with-Entity-Framework-Code-First-Part-2/

我不知道,为什么你要让你的生活如此艰难,你注意到EF不喜欢你的数据定义,也许你看看使用复杂类型,或者TPH和两个实体共享相同的基础专栏,这将更容易。