【发布时间】:2014-06-10 18:06:22
【问题描述】:
这可能已经在某处被问过,但我找不到与我正在尝试做的完全匹配的问题。
在数据库级别,我有 TableB,它只有两个字段 - TableA 的外键和 nvarchar(max) 代码字段。 TableA 到 TableB 的关系是一对多。
在 EF 级别,我想完全跳过映射 TableB。 TableA 看起来像这样:
public class TableA
{
public ICollection<string> BCodes {get; set;}
}
我希望从所有相关 TableB 实体的代码字段中填充 BCode。我知道我可以使用数据库上的视图和其他 hack 来实现这一点,但这破坏了关注点的分离。是否可以使用 EF,或者我是否必须仅使用一个字符串属性映射 TableB 实体?
更新 我应该澄清一下,对于我的具体情况,这可能是一个只读集合。偶然发现这个问题的其他人可能有不同的需求,所以如果您有实现它的读/写方式的想法,那也很棒。
【问题讨论】:
-
出于好奇,您为什么不想要映射?
-
我主要是试图将我的数据库实现细节与我的实体实现分开。在数据库级别,我需要 TableB 位于单独的表中,因为它是一对多的,但这不应该真正渗透到我的实体中。就 C# 而言,这些代码只是 TableA 的一个属性。
-
但在这种情况下,您要么拥有
TableB的集合,要么拥有string的集合。真的有区别吗? -
在实现方面,不,但在设计方面,这是一个根本的区别。 TableB 在我的应用程序中不是具有任何意义的真实实体。它没有责任,也不代表任何具体的东西。它基本上只是数据库实现细节渗入代码的泄漏抽象,这是 EF 中的 POCO 和流式映射应该防止的。
标签: c# entity-framework entity-framework-6.1