4

首先:我是 EF 新手,这只是为了测试 EF 的功能,看看它如何适应已经根据数据库表和对象模型设置的环境 - 以及当这两个模型不要在类名/表名和属性名/列名上,甚至表和类的数量上进行1:1的映射。如果您想回复:“EF 不应该以这种方式使用”,请记住“测试功能”。谢谢!:)

考虑以下场景。

我有三个数据库表:

|----------------|       |-------------|       |-----------------|
|   MessageLog   | >---1 |   Message   | 1---< |   MessageText   |
|----------------|       |-------------|       |-----------------|
| logId          |       | messageId   |       | messageId       |
| messageId      |       | type        |       | languageCode    |
| from           |       | ...         |       | text1           |
| to             |       |-------------|       | text2           |
| ...            |                             | ...             |
|----------------|                             |-----------------|

我想映射到两个类:

|--------------------|       |----------------------------|
|   ServiceMessage   |<-\    |   ServiceMessageInstance   |
|--------------------|  |    |----------------------------|
| Id: string         |  |    | Id: string                 |
| LanguageCode: str. |  \----| Message: ServiceMessage    |
| Text1: string      |       | From: DateTime             |
| Text2: string      |       | To: DateTime               |
| Type: MessageType  |       |----------------------------|
|--------------------|

ServiceMessage 对象由 Message 表中的一行(以messageId作为键)和 MessageText 表中的一行(以messageIdlanguageCode作为键)组成。

ServiceMessageInstance 更简单:它具有对 ServiceMessage 对象的引用和一些附加属性。

我在 EF 上玩了一些,并进行了很多谷歌搜索,但我还没有找到我的问题的答案:我怎样才能用 EF 做到这一点?我应该采取哪种方法?我可以用 EDMX 设计器做到这一点吗?DbContext.OnModelCreating?

我意识到这可能有点过于“宽泛”的问题,但我会很感激任何指针!

谢谢。

BR,爱马仕

4

2 回答 2

0

走哪条路问题:-) 这里解释得很好:http: //msdn.microsoft.com/en-us/data/ee712907

为了帮助您,您还可以安装Entity Framework powertools。

http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

首先从数据库逆向工程代码是一个不错的选择。
创建一个新项目。然后在项目 Right Click 上,上下文菜单应该提供 在此处输入图像描述

您应该会看到添加到项目中的代码。这对审查很有用。然后删除了临时项目。在为您自己的代码获取有用的部分之后。

祝你好运

于 2013-02-21T15:17:46.977 回答
0

说实话,我实际上并没有尝试过,因为我没有遇到迫使我这样做的情况,但我记得当我阅读“编程实体框架 DbContext ”时,我遇到了一个部分确切地说,第 5 章称为“跨多个表映射单个实体”,我认为这正是您想要的。
笔记

  • 上述称为“实体拆分”的功能首先使用实体​​框架代码,但我假设(不确定)它也可能与其他实体框架神话一起使用。
  • 您不能通过 Data Annotations 启用它,而是必须使用 Fluent API 对其进行配置。
  • 为此,您需要使用Map功能。
  • 还有一个功能也朝着另一个方向发展,它允许您将多个实体映射到单个表。
于 2013-02-22T00:16:10.100 回答