【发布时间】:2018-10-08 02:50:47
【问题描述】:
在我的项目中,我有一个表格Translation,可以翻译任何模型。为此,该表有两个字段:Model 和 ModelId。 Model 属性包含一个指示模型类型的整数,ModelId 具有此模型的 id。
因此,例如:Product 表的模型类型 ID 为 1。要获取 ID 为 317 的产品的所有翻译,我会搜索 Model=1 AND ModelId=317 的翻译。
现在我想在 Entity Framework Core 中创建这个关系。我所有的模型都继承自 BaseModel 类,该类有一个属性 ModelType 保存模型类型的 id。该字段未映射,因此在数据库中不可用。
我尝试使用 fluent api 创建关系,但它不允许我指定更多要过滤的列。
modelBuilder.Entity<BaseModel>()
.HasMany<Translation>(bm => bm.Translations)
// Extra filters
有没有什么方法可以创建这种关系,而不必为每个需要翻译的查询手动创建连接?
【问题讨论】:
-
我不知道任何允许您开箱即用的 EF 功能。请注意,要使其正常工作,您的数据库必须先天地放弃对 ID 列的 FK 约束;这使得夜间无法即时查询(或更新)正确的数据。这将成为一个两步过程,因为表名(第一步)将影响 ID 查找逻辑(第二步)。我建议编写自定义
DbContext,或自定义Repository,为您填充必要的导航属性。 -
modelBuilder.Entity<BaseModel>()将使您的BaseModel实体 EF 将使用TPH inheritance strategy 映射它。换句话说,到一个单个数据库表。我猜这不是你想要的?
标签: c# sql-server .net-core entity-framework-core