我正在使用实体框架,代码优先,4.0,命中现有的旧数据库以进行只读访问。数据库已标准化,所以
Table [Event]
[ID]
[Date_Entered]
[Event_Status_Key]
Table [Event_Status]
[Event_Status_Key]
[Event_Status_Description]
我的班级看起来像
public class Event
{
public DateTime DateEntered { get; set; }
public string StatusDescription { get; set; }
}
这是一个WCF服务层应用程序。
我的两个问题:
有没有简单的方法来填充状态描述而不创建第二个Dictionary类型对象?我见过这样的问题:Entity Framework Mapping to Lookup table,但它们似乎专注于对象,我真的只想要一个原语。我更喜欢使用流畅的API而不是属性。
加载数据时,是否在代码层缓存了任何数据?或者每次检查StatusDescription是否意味着在[Event_Status]表上单独调用?
编辑:一种可能的(更主观,这就是为什么我没有提起它)第三个问题是数据实体与数据库的匹配程度。它总是一对一的场/桌吗?我正在做什么(将两个表连接成一个数据实体obejct)不好?
感谢。
答案 0 :(得分:1)
实体框架期望您将两个表映射为单独的实体,并在查询中使用投影:
var query = from e in context.Events
select new WcfEvent // Your original Event class is just DTO
{
DateEntered = e.DateEntered,
StatusDescription = e.EventStatus.EventStatusDescription
};
此示例要求您对Event
和Event_Status
表进行正确的一对一映射。
如果您需要任何类型的缓存,您必须自己实施。预测结果甚至没有被上下文跟踪。