【问题标题】:Using existing database and EF code-first, mapping a lookup table to entity使用现有数据库和 EF 代码优先,将查找表映射到实体
【发布时间】:2012-03-20 03:16:14
【问题描述】:

我正在使用实体框架,代码优先,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. 是否有任何简单的方法可以在不创建第二个字典类型对象的情况下填充状态描述?我见过这样的问题:Entity Framework Mapping to Lookup table,但他们似乎专注于对象到对象,我真的只想要一个原语。我更喜欢使用流畅的 API 而不是属性。

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

编辑:第三个可能的问题(更主观,这就是我没有提出它的原因)是数据实体与数据库的匹配程度。它总是一对一的字段/表吗?我在做什么(将两个表加入一个数据实体对象)不好?

谢谢。

【问题讨论】:

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


    【解决方案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 表正确地进行一对一映射。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2016-10-11
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多