我们使用的是EntityFramework,并且已经和Database First一起经历了漫长的旅程。我们有多个上下文和许多实体。尽管我们首先接受了代码项目的概念,但我们想要探索EF提供的其他可能性。EntityFramework首先使用数据库检测复杂类型
我们正在使用最新版本的EF作为当前,6.0.2
我们有相当与普通场数表,如审计领域“CreatedBy”,“CreatedDate”,“UpdatedBy”和“UpdatedDate “我们认为在这里使用ComplexType是完美的。
在使用这些字段的表中,当我们从数据库中生成代码时,它会以raw的形式提取字段。然后我们在模型浏览器中删除它,添加复杂类型,然后将复杂属性映射到数据库中的字段名称。
在这个实验中,我们运行了“从模型生成数据库”,而没有映射字段以查看结果列名是什么,以及是否有任何约定或自动魔术会双向允许该行为(将复杂类型转换为列并将列识别为复杂类型)。
这导致列名称的复杂类型后缀为'_'和字段名称。我们进行了测试,并且在重新生成模型时,它不会从模型中的数据库中拉回复杂类型。
有没有一种正确的方法让EF首先检测带有数据库的表中的复杂类型? 有没有我可以编写的代码工厂,构建器,策略或模板?
我们的主要动机是我们有相当多的表格支持,我们接受频繁的更改,我们希望阻止团队中的人员忽略此步骤并破坏代码库。
非常感谢您的时间StackOverflowians!
- 编辑 -
虽然这并不使用自动检测复杂类型的解决这个问题,这有解决开发者的打破它们运行的T4模板更新时间模型的问题。
您是否建议使用复杂类型来简化审计的使用?作为一个便笺,我很好奇你的审计专栏名称。是CreatedBy一个varchar?如果没有,并且它实际上是和Id指针,那么我会建议CreatedById。我喜欢CreatedBy的可读性,但是CreatedDate听起来有点老派,你可能会考虑CreatedOn(我不喜欢[匈牙利记法](http://en.wikipedia.org/wiki/Hungarian_notation))。 –
是的,我们使用复杂的类型来缓解审计。完全开放给其他做法/想法。 我们的“By”字段是varchar而不是FK /指针ID,因为在我们的用例中,我们实际上允许在引用数据上进行硬删除。每次我们写入主表时,它实际上都会将记录写入辅助“审计”表中。虽然实际的表可能(也可能应该)实际上对主用户有一个FK,但审计表不会强制引用,以便我们可以维护一条路径。 最后,我同意“关于”,之前没有听到过这个建议,也没有人真正抱怨过:) – Min
呃“已用”。当然不再像帖子所描述的那样了 – Min