将实体代码优先属性映射到其他表
本文关键字:映射 其他 属性 实体 代码 | 更新日期: 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和两个实体共享同一个基列,这会更容易。