gpt4 book ai didi

entity-framework - 将 F# 类型保存到数据库

转载 作者:行者123 更新时间:2023-12-04 07:23:56 25 4
gpt4 key购买 nike

A lot f# 篇 recommend使用 fsharp 的内置类型(例如可区分联合、元组和记录)对域进行建模。一旦我们有了这个模型,它如何持久化到数据库中?

Entity Framework 和类型提供程序仅适用于具有可变属性的标准类。

最佳答案

你可以把[<CLIMutable>]记录上的属性:

[<CLIMutable>]
type Foo = { Bar : string; Baz : int }

当通过 IL、C# 或 Visual Basic 查看时,这将把它变成一个具有可变属性的类。从 F# 来看,它仍然看起来像一个不可变的记录。

但是,这并没有真正解决问题,因为没有用于(反)序列化歧视联合的相应功能。

(顺便说一句,IIRC,JSON.net 支持 F# 记录和歧视联合,但到目前为止,这是我所知道的唯一异常(exception)。)

在我看来,这是一个 因祸得福 , 因为 域模型应该与持久性细节分离 .

在 C# 中,您可能认为像 Entity Framework 这样的 ORM 提供了这种解耦,但事实并非如此。即使使用所谓的代码优先 POCO 实体,您最终仍会创建一个关系模型,而不是一个面向对象的模型。想想“导航属性”,它们纯粹是关系问题。在 OOD 中,此类属性违反了 law of Demeter (我们称它们为火车残骸)。

如果您想让领域模型与实现细节分离,您需要先创建模型,然后再想办法将其持久化。您如何做到这一点取决于所使用的持久性技术。

关于entity-framework - 将 F# 类型保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31892254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com