C# 对现有数据库和域/对象模型(不是1:1)使用EF
首先:我是一名EF新手,这只是为了测试EF的功能,看看它如何适应一个已经在数据库表和对象模型方面设置好的环境,以及这两个模型在类名/表名和属性名/列名,甚至表和类的数量方面没有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 |
|----------------| |-------------| |-----------------|
| 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
用作鉴别器)。我认为那是办不到的。