Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对现有数据库和域/对象模型(不是1:1)使用EF_C#_Entity Framework_Ef Code First_Ef Database First - Fatal编程技术网

C# 对现有数据库和域/对象模型(不是1:1)使用EF

C# 对现有数据库和域/对象模型(不是1:1)使用EF,c#,entity-framework,ef-code-first,ef-database-first,C#,Entity Framework,Ef Code First,Ef Database First,首先:我是一名EF新手,这只是为了测试EF的功能,看看它如何适应一个已经在数据库表和对象模型方面设置好的环境,以及这两个模型在类名/表名和属性名/列名,甚至表和类的数量方面没有1:1的映射。如果您迫切想回答:“EF不应该以这种方式使用”,请记住“测试能力”。谢谢!:) 考虑以下场景 我有三个数据库表: |----------------| |-------------| |-----------------| | MessageLog | >---1 |

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

考虑以下场景

我有三个数据库表:

|----------------|       |-------------|       |-----------------|
|   MessageLog   | >---1 |   Message   | 1---< |   MessageText   |
|----------------|       |-------------|       |-----------------|
| logId          |       | messageId   |       | messageId       |
| messageId      |       | type        |       | languageCode    |
| from           |       | ...         |       | text1           |
| to             |       |-------------|       | text2           |
| ...            |                             | ...             |
|----------------|                             |-----------------|
|------------------------------------------------------------||-----------------|
|MessageLog |>--1 | Message | 1--<| MessageText|
|----------------|       |-------------|       |-----------------|
|logId | | messageId | | messageId|
|messageId | |类型| |语言代码|
|从| |…| |文本1|
|致| |-------------------| | text2|
| ...            |                             | ...             |
|----------------|                             |-----------------|
我想将其映射到两个类:

|--------------------|       |----------------------------|
|   ServiceMessage   |<-\    |   ServiceMessageInstance   |
|--------------------|  |    |----------------------------|
| Id: string         |  |    | Id: string                 |
| LanguageCode: str. |  \----| Message: ServiceMessage    |
| Text1: string      |       | From: DateTime             |
| Text2: string      |       | To: DateTime               |
| Type: MessageType  |       |----------------------------|
|--------------------|
|----------------------------|----------------------------|
|ServiceMessage |走哪条路问题:-)这里很好地解释了它:

为了帮助您,您还可以安装实体框架powertools。

有一个很好的选项,可以首先从数据库中对代码进行反向工程。
做一个新项目。然后在项目上单击鼠标右键,上下文菜单应提供

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


祝你好运

说实话,我没有真正尝试过这样做,因为我没有遇到迫使我这么做的情况,但我记得,当我阅读“”时,我在第5章中遇到了一个章节,确切地说是“将一个实体映射到多个表”,我认为这正是你想要的。
注释

  • 上面提到的名为“实体拆分”的功能首先使用实体框架代码,但我假设(不确定)其他实体框架神话也可以使用
  • 您不能通过数据注释启用它,而是必须使用Fluent API对其进行配置
  • 为此,您需要使用功能
  • 还有一个功能也朝着另一个方向发展,它允许您将多个实体映射到单个表

+1对于ASCII样式的对象/数据库模型:DIt是实体拆分和TPH继承的合并(其中
languageCode
用作鉴别器)。我认为那是办不到的。