我在Mono上使用带有F#的OrmLite。
我有以下基本结构:
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.
我错了吗?如果没有,有没有办法绕过它?
非常感谢你的帮助!
答案 0 :(得分:3)
看起来这是由于这些属性没有被声明为继承,我使用它们与NestedTree的子类,因此问题。
请参阅http://msdn.microsoft.com/en-us/library/tw5zxet9.aspx:
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = false, Inherited = true)]
将OrmLite属性标记为可继承是很好的,这样我们就可以继承而不是覆盖。
答案 1 :(得分:1)
您可以使用&#39; CLIMutable&#39;属性。
[<CLIMutable>]
type TestType = {[<AutoIncrement>][<PrimaryKey>]A: int; B: string}