将实体代码优先属性映射到其他表

本文关键字:映射 其他 属性 实体 代码 | 更新日期: 2023-09-27 17:57:18

我被要求修改一个现有应用程序,该应用程序将 EF 实体对象从前端中显示的业务层传回。在一些地方,有些记录将办公室代码作为字符串记录在数据库中。我在前端被要求现在显示其中一些记录的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?
}

以为我可以使用实体拆分,但我收到错误消息

实体类型"Office"

和"Note"不能共享表"Office",因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,并且它们之间的主键匹配。

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

有人能想到一种优雅的方式来在笔记中显示OfficeName,而无需对堆栈进行重大调整。

将实体代码优先属性映射到其他表

可以使用

EF 的拦截器概念。IDbCommandInterceptor 允许您在执行之前修改 SQL 语句,并在执行后修改结果。

您必须将参数(办公室代码)传递给拦截器,然后手动修改 sql 查询(....从 Office 其中 Note.OfficeCode = Office.OfficeCode )

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

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