【发布时间】:2016-04-03 00:17:28
【问题描述】:
我在尝试将我的类型上的属性映射到 Cassandra 中的映射时遇到问题。
我在 C# 中工作,但我在 F# 中苦苦挣扎
我得到的错误是: Stack Trace: [System.ArgumentOutOfRangeException: Expression x => new Tuple`2(x.Id, ToFSharpFunc(x => x.WithName("player_id"))) 不是属性或场地。参数名称:表达式]
在第 26 行,如果我删除了 "fun(x:ColumnMap)->x.WithName("player_id")" 它会编译但它不会映射到正确的表列。我的模型属性名称是“Id”,但我需要它映射到“player_id”
open Cassandra
open Cassandra.Mapping
open System
type Ranking =
{ Id : Guid
Alias : string
Kills : int
Deaths : int }
type Player = {Id: Guid; Alias: string; Dob: DateTime; FullName: string}
type CassyMappings() =
inherit Cassandra.Mapping.Mappings()
do
base.For<Player>()
.TableName("players")
.PartitionKey("player_id")
.Column(fun(x:Player)-> x.Id)
.Column(fun(x:Player)-> x.Alias)
.Column(fun(x:Player)-> x.FullName)
.Column(fun(x:Player)-> x.Dob) |> ignore
base.For<Ranking>()
.TableName("rankings")
.PartitionKey("player_id")
.Column(fun (x : Ranking) -> x.Id, fun(x:ColumnMap)->x.WithName("player_id"))
.Column(fun (x : Ranking) -> x.Alias)
.Column(fun (x : Ranking) -> x.Kills)
.Column(fun (x : Ranking) -> x.Deaths) |> ignore
MappingConfiguration.Global.Define<CassyMappings>()
printfn "Works fine!"
https://dotnetfiddle.net/8IiYhg
这里是 C# http://www.datastax.com/dev/blog/csharp-driver-cassandra-new-mapper-linq-improvements的链接
【问题讨论】:
-
将您的代码放入实际问题中。另外,请解释“在 F# 中挣扎是什么意思”——包括任何错误消息等。
-
当然,没问题.. 我为它创建了一个 DotNetFiddle here 我的错误是“堆栈跟踪:[System.ArgumentOutOfRangeException: Expression x => new Tuple`2(x.Id, ToFSharpFunc( x => x.WithName("player_id"))) 不是属性或字段。参数名称:表达式]"
-
在第 26 行,如果我删除了 "fun(x:ColumnMap)->x.WithName("player_id")" 它会编译但它不会映射到正确的表列。我的模型属性名称是“Id”,但我需要它映射到“player_id”
-
把所有这些包括实际代码,而不是问题中的链接。