3

我在 Mono 上使用 OrmLite 和 F#。

我有以下基本结构:

type NestedTree() =
    static member val table_name = String.Empty with get, set
    //DB fields
    [<AutoIncrement>]
    [<PrimaryKey>]
    member val id = 0 with get, set
    member val parent_id = Nullable<_>(null) with get, set
    member val name = String.Empty with get, set
    member val lft = 0 with get, set
    member val rgt = 0 with get, set
    member val depth = 0 with get, set

但是,当我使用时不考虑 Autoncrement 属性:

    use conn = dbFactory.Open()
    let item = ...
    conn.Insert(item)

我认为这是因为 F# 中的默认值设置为 0。

我错了吗 ?如果没有,有没有办法绕过它?

非常感谢您的帮助 !

4

2 回答 2

3

似乎是由于这些属性没有被声明为继承,而我将它们与 NestedTree 的子类一起使用,因此出现了问题。

请参阅http://msdn.microsoft.com/en-us/library/tw5zxet9.aspx

[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = false, Inherited = true)]

最好将 OrmLite 属性标记为可继承,以便我们可以继承而不是覆盖。

于 2013-08-04T18:31:07.837 回答
1

您可以使用“CLIMutable”属性。

[<CLIMutable>]
type TestType = {[<AutoIncrement>][<PrimaryKey>]A: int; B: string}
于 2018-03-05T10:04:06.717 回答