Entity Framework 还是 SQL Server Management Studio?

3

在领域驱动设计中,最好采用微小的步骤(更改设计或代码、单元测试等)。

  1. 我认为使用 SQL Server Management Studio 编写 SQL Server 脚本是不错的选择,但是在 DDD 中,数据库代码是在我们测试设计之后编写的。

  2. 使用 c# 编写代码,然后使用 EF 创建数据库,你会经常更改 c# 代码,这将会大量隐式地更改数据库代码。

如何最好地进行?

2个回答

1
DDD强调持久化无知,即领域实体(实体类、值对象)不应知道它们如何持久化。然而,技术上的持久化问题并不总是能够轻易地避免或延迟。因此,代码中的模型通常会受到持久化技术约束的影响。
你已经预示了最佳方法:采用微小步骤。问题是什么构成了一步。初始步骤可以包括在代码中设计模型,然后实现持久化。随后的一步重复这个过程。步骤很小降低了你在代码中创建无法轻松持久化的设计的机会,同时优先关注模型而不是数据库。
关于使用SQL Management studio与EF生成器,这是一个偏好问题。我更喜欢手写SQL,其他人可能喜欢EF的生成工具。

好的,这是一个偏好问题,但 EF 的性能如何呢?它接近 SQL 代码的性能吗? - Blocked
1
如果进行了最大程度的调整,通常可以从原始SQL中获得更好的性能,但是只要适当的索引存在并且查询不涉及复杂的连接,EF也可以表现得足够好。 - eulerfx

1
假设您正在进行一个棕地项目。然后,对于给定的用户故事:
1)设计并单元测试您的领域模型。
2)然后integration-test您的基础设施。这包括针对为这些测试动态创建的数据库测试存储库实现(可以是内存或嵌入式)。NHibernate会自动生成模式,EF不确定。 在此处保持持久性不可知肯定有所帮助,因为您可以针对SQLite进行测试,但例如运行SQL Server。
3)然后手动编写迁移脚本以用于生产数据库。这一步没有黑魔法可以帮助您。稍后可以由像RoundhousE这样的框架执行脚本。更多信息here
反复洗涤。对于尚未部署的新项目,可以跳过第3步,在第一次生产部署时生成“基线”脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接