使用现有数据库和EF代码优先,将查找表映射到实体

时间:2012-03-19 16:01:43

标签: c# entity-framework-4 ef-code-first

我正在使用实体框架,代码优先,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服务层应用程序。

我的两个问题:

  1. 有没有简单的方法来填充状态描述而不创建第二个Dictionary类型对象?我见过这样的问题:Entity Framework Mapping to Lookup table,但它们似乎专注于对象,我真的只想要一个原语。我更喜欢使用流畅的API而不是属性。

  2. 加载数据时,是否在代码层缓存了任何数据?或者每次检查StatusDescription是否意味着在[Event_Status]表上单独调用?

  3. 编辑:一种可能的(更主观,这就是为什么我没有提起它)第三个问题是数据实体与数据库的匹配程度。它总是一对一的场/桌吗?我正在做什么(将两个表连接成一个数据实体obejct)不好?

    感谢。

1 个答案:

答案 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 
                };

此示例要求您对EventEvent_Status表进行正确的一对一映射。

如果您需要任何类型的缓存,您必须自己实施。预测结果甚至没有被上下文跟踪。