【发布时间】:2011-08-19 23:28:15
【问题描述】:
我正在从头开始构建一个新项目。 我创建了一个数据库,我一直应用一个数据库结构,我用一个简短的不言自明的例子来解释:
表项->(ID,名称)->包含一般信息
Table ItemInfo -> (Item_Id, Language, Description) -> 包含语言相关信息。
Id 和 Item_Id 是通过外键关系连接起来的。
我的想法是以一种最终只使用通过实体框架填充的单个 POCO 对象“项目”的方式对其进行建模。该对象将仅包含公共属性:Id、Name 和 Description。 语言将对使用此对象的代码隐藏,对象本身应负责根据包含该语言的全局变量给出正确的描述。
我尝试了几种方法来做到这一点,但总是遇到问题,因为实体框架不允许这种情况。我总是必须检索所有语言的信息,而不仅仅是当前的一种或使用 2 个不同的查询。
所以最后我开始使用的解决方案是让 T4 模板同时创建 Item 和 ItemInfo,然后我手动添加了类似这样的代码:
public partial class Item
{
private ItemInfo _itemInfo = null;
private ItemInfo itemInfo
{
get
{
if (_itemInfo == null) _itemInfo = ItemInfoes.Single(p => p.Language == GlobalContext.Language);
return _itemInfo;
}
}
public Description
{
get { return itemInfo.Description; }
set { itemInfo.Description = value;}
}
}
使用此代码,我将 ItemInfo 中的其他属性添加到 Item 并根据我的要求选择了正确的语言。 你认为这是一个好的解决方案吗?你会如何解决这个问题?
但是,运行 sql profiler 我可以看到 2 个不同的 sql 查询用于填充 Item 对象,一个查询 Item 表,另一个查询 ItemInfo。
可以通过在 2 个表之间进行连接的单个查询来实现相同的场景吗? (我担心长期性能受到影响,这也是我在没有 ORM 的情况下会这样做的方式。
欢迎任何建议,我有多年的编程经验,但我是实体框架和 ORM 的新手。
请帮忙。
【问题讨论】:
-
为什么不使用 linq-to-sql 而不是使用实体框架?
-
另外,我假设一个 Item 有很多 ItemInfos?
-
linq to sql 已过时,将被淘汰 linq to entity 将在很长一段时间内得到支持,并且正在积极改进和开发中,如果可能,请避免使用 linq to sql
标签: c# entity-framework entity-framework-4 linq-to-entities multilingual