不同表的单个实体

时间:2011-10-04 07:25:48

标签: entity-framework-4

我有相同类型的表

ProductCodeTable,CountrycodeTable等

所有人都有关键,值作为他们的字段

当我使用实体框架工作时, 我是否可以为所有这些表创建一个实体,以便我可以制定不同的查询以从不同的表中获取数据?

3 个答案:

答案 0 :(得分:1)

您可以为所有实体创建基类,并为每个实体创建子类

public abstract class LookUpEntity
{
    [Key]
    public int Key { get; set; }

    [Required]
    public string Value { get; set; }
}

[Table("ProductCodeTable")]
public class ProductCode : LookUpEntity
{

}

通过这种方式,您可以对关系进行建模,如果您想要向那些查找实体添加特定属性而不影响其他实体,则可以对其进行建模。

答案 1 :(得分:0)

您可以创建一个包含所有表的Union的视图,如下所示:

create view AllKeyTables as 

SELECT 'Product' as table, Productkey as Key, nameProduct as name 
FROM ProductCodeTable
UNION
SELECT 'Country' as table, CountryISO as key, CountryName as name 
FROM CountrycodeTable
UNION
...

然后更新EF模型并将'table'和'key'字段检查为Entity Primary Key。

您将要做的下一个问题是:'如何在此实体与现有实体之间建立关系?'答案是'你不能,因为EF不能在除主键之外的其他字段之间加入实体'。然后,在实施此解决方案之前,请确保您正在寻找。

答案 2 :(得分:0)

EF仅在您将其建模为继承时才支持此功能(@Eranga以代码优先方式显示它)。您将为每个表具有单个基本实体和派生实体,因此您不会避免为每个表使用不同的类型。否则答案是否定的。

继承将对表中的数据提出额外要求。例如,Ids必须在所有表中都是唯一的。因此,如果ProductTableCode将具有Id 1的记录,则CountryCodeTable(以及任何其他代码表)不得具有Id 1的记录。

EF中的继承也会产生令人讨厌且性能很差的查询。

相关问题