Datastax c#Cassandra在更新到3.X后引发异常
我刚刚将驱动程序从2.7.3升级到3.0.3,似乎Mapper.Single()做了一些奇怪的事情。它只是在旧版本上工作,但现在抛出了一个异常Datastax c#Cassandra在更新到3.X后引发异常,c#,cassandra,datastax,C#,Cassandra,Datastax,我刚刚将驱动程序从2.7.3升级到3.0.3,似乎Mapper.Single()做了一些奇怪的事情。它只是在旧版本上工作,但现在抛出了一个异常 Exception thrown: 'System.ArgumentException' in Cassandra.dll ("Argument types do not match") 模式: CREATE TABLE IF NOT EXISTS client ( id uuid PRIMARY KEY, timezone froze
Exception thrown: 'System.ArgumentException' in Cassandra.dll ("Argument types do not match")
模式:
CREATE TABLE IF NOT EXISTS client (
id uuid PRIMARY KEY,
timezone frozen<timezone>,
language frozen<language>,
bank set<frozen<bank>>,
name text,
country frozen<country>
);
CREATE TYPE IF NOT EXISTS timezone (
id uuid,
name text,
time int
);
CREATE TYPE IF NOT EXISTS language (
id uuid,
name text,
iso text
);
CREATE TYPE IF NOT EXISTS bank (
id uuid,
name text,
number int
);
CREATE TYPE IF NOT EXISTS country (
id uuid,
name text,
iso2 text,
iso3 text
);
如果客户端不存在,则创建表(
id uuid主键,
时区冻结,
语言冻结,
银行集合,
名称文本,
国家冻结
);
如果时区不存在,则创建类型(
id uuid,
名称文本,
时间整数
);
如果语言不存在,则创建类型(
id uuid,
名称文本,
iso文本
);
创建类型(如果不存在)(
id uuid,
名称文本,
整数
);
如果国家/地区不存在,则创建类型(
id uuid,
名称文本,
iso2文本,
iso3文本
);
映射
For<Client>()
.TableName("client")
.PartitionKey(u => u.Id)
.Column(u => u.Id, cm => cm.WithName("id"))
.Column(u => u.Name, cm => cm.WithName("name").WithSecondaryIndex())
.Column(u => u.Timezone, cm => cm.WithName("timezone"))
.Column(u => u.Language, cm => cm.WithName("language"))
.Column(u => u.Country, cm => cm.WithName("country"))
.Column(u => u.Banks, cm => cm.WithName("bank"));
UdtMap.For<Timezone>()
.Map(u => u.Id, "id")
.Map(u => u.Name, "name")
.Map(u => u.Time, "time")
UdtMap.For<Bank>()
.Map(u => u.Id, "id")
.Map(u => u.Number, "number")
.Map(u => u.Name, "name")
UdtMap.For<Language>()
.Map(u => u.Id, "id")
.Map(u => u.Name, "name")
.Map(u => u.Iso, "iso")
UdtMap.For<Country>()
.Map(u => u.Id, "id")
.Map(u => u.Name, "name")
.Map(u => u.Iso2, "iso2")
.Map(u => u.Iso3, "iso3")
()
.TableName(“客户”)
.PartitionKey(u=>u.Id)
.Column(u=>u.Id,cm=>cm.WithName(“Id”))
.Column(u=>u.Name,cm=>cm.WithName(“Name”).WithSecondaryIndex())
.列(u=>u.时区,cm=>cm.WithName(“时区”))
.Column(u=>u.Language,cm=>cm.WithName(“语言”))
.列(u=>u.Country,cm=>cm.WithName(“国家”))
.列(u=>u.Banks,cm=>cm.WithName(“银行”);
UdtMap.For()
.Map(u=>u.Id,“Id”)
.Map(u=>u.Name,“Name”)
.Map(u=>u.Time,“Time”)
UdtMap.For()
.Map(u=>u.Id,“Id”)
.Map(u=>u.Number,“Number”)
.Map(u=>u.Name,“Name”)
UdtMap.For()
.Map(u=>u.Id,“Id”)
.Map(u=>u.Name,“Name”)
.Map(u=>u.Iso,“Iso”)
UdtMap.For()
.Map(u=>u.Id,“Id”)
.Map(u=>u.Name,“Name”)
.Map(u=>u.Iso2,“Iso2”)
.Map(u=>u.Iso3,“Iso3”)
C#代码
公共静态类CassandraConnection
{
私有静态集群;
公共静态字符串键空间{get;set;}
公共静态字符串[]地址{get;set;}
公共静态字符串用户名{get;set;}
公共静态字符串密码{get;set;}
公共静态ISession会话{get;set;}
公共静态映射配置映射配置{get;set;}
公共静态IMapper映射程序{get;set;}
公共静态无效连接()
{
Addresses=CloudConfigurationManager.GetSetting(“Cassandra.Addresses”).Split(“;”);
Keyspace=CloudConfigurationManager.GetSetting(“Cassandra.Keyspace”);
Username=CloudConfigurationManager.GetSetting(“Cassandra.Username”);
Password=CloudConfigurationManager.GetSetting(“Cassandra.Password”);
if(String.IsNullOrEmpty(用户名))
{
CassandraConnection.Cluster=Cluster.Builder().AddContactPoints(Addresses.Build();
}
其他的
{
CassandraConnection.Cluster=Cluster.Builder()。添加联系人(地址)。使用凭据(用户名、密码)。Build();
}
CassandraConnection.Session=CassandraConnection.Cluster.Connect(键空间);
MappingConfiguration.Global.Define();
Define(UdtCassandra.Udts());
CassandraConnection.Mapper=新映射器(CassandraConnection.Session);
}
}
公共类CassandraRepository:IRepository,其中T:BaseDomain
{
公共T GetById(T实体)
{
if(CassandraConnection.Session==null)
{
CassandraConnection.Conectar();
}
如果(实体!=null)
{
返回CassandraConnection.Mapper.Fetch(“其中id=?”,entity.id).FirstOrDefault();//这应该只是SingleOrDefault(),但我正在测试东西;
}
返回默认值(T);
}
}
堆栈跟踪
em System.Linq.Expressions.Expression.Condition(Expression test, Expression ifTrue, Expression ifFalse)
em Cassandra.Mapping.MapperFactory.GetExpressionToGetColumnValueFromRow(ParameterExpression row, CqlColumn dbColumn, Type pocoDestType)
em Cassandra.Mapping.MapperFactory.CreateMapperForPoco[T](RowSet rows, PocoData pocoData)
em Cassandra.Mapping.MapperFactory.CreateMapper[T](RowSet rows)
em Cassandra.Mapping.MapperFactory.<>c__DisplayClass1`1.<GetMapper>b__0(Tuple`2 _)
em System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
em Cassandra.Mapping.MapperFactory.GetMapper[T](String cql, RowSet rows)
em Cassandra.Mapping.Mapper.<>c__DisplayClass7`1.<FetchAsync>b__6(Statement s, RowSet rs)
em Cassandra.Mapping.Mapper.<>c__DisplayClass2`1.<>c__DisplayClass4.<ExecuteAsyncAndAdapt>b__1(Task`1 t2)
em Cassandra.Tasks.TaskHelper.DoNext[TIn,TOut](Task`1 task, Func`2 next)
em Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
em Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
em Cassandra.Mapping.Mapper.Fetch[T](Cql cql)
em Cassandra.Mapping.Mapper.Fetch[T](String cql, Object[] args)
em CassandraWebTest.Repository.Cassandra.CassandraRepository`1.GetById(T entity) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Repository\Cassandra\CassandraRepository.cs:linha 124
em CassandraWebTest.Business.Security.Client.GetById(Client Client) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Business\Security\Client.cs:linha 63
em CassandraWebTest.Business.Security.UsuarioAutenticacao.Authenticate(UsuarioAutenticacao usuarioAutenticacao) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Business\Security\UsuarioAutenticacao.cs:linha 95
em CassandraWebTest.Web.Controllers.LoginController.Authenticate(String usuario, String senha, Boolean persistente) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\Web\CassandraWebTest.Web\Controllers\LoginController.cs:linha 38
em System.Linq.Expressions.Expression.Condition(表达式测试、表达式ifTrue、表达式ifFalse)
em Cassandra.Mapping.MapperFactory.GetExpressionToGetColumnValueFromRow(ParameterExpression行,CqlColumn dbColumn,类型pocoDestType)
em Cassandra.Mapping.MapperFactory.CreateMapperForPoco[T](行集行,PoCoDataPoCoDataPoCoData)
em Cassandra.Mapping.MapperFactory.CreateMapper[T](行集行)
em Cassandra.Mapping.MapperFactory.c_uuuudisplayClass1`1.b_uuu0(元组`2\u0)
em System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)
em Cassandra.Mapping.MapperFactory.GetMapper[T](字符串cql,行集行)
em Cassandra.Mapping.Mapper.c_uuuudisplayClass7`1.b_uuuu6(语句s,行集rs)
em Cassandra.Mapping.Mapper.c_uuudisplayClass2`1.c_uudisplayClass4.b_uu1(任务`1 t2)
em Cassandra.Tasks.TaskHelper.DoNext[TIn,TOut](任务'1任务,函数'2下一步)
em Cassandra.Tasks.TaskHelper.WaitToComplete(任务任务,Int32超时)
em Cassandra.Tasks.TaskHelper.WaitToComplete[T](任务'1任务,Int32超时)
em Cassandra.Mapping.Mapper.Fetch[T](Cql-Cql)
em Cassandra.Mapping.Mapper.Fetch[T](字符串cql,对象[]args)
em CassandraWebTest.Repository.Cassandra.CassandraRepository`1.GetById(T实体)na C:\Users\devb0194\Source\workspace\cassandrawebtv3\CassandraWebTest.Repository\Cassandra\CassandraRepository.cs:linha 124
em CassandraWebTest.Business.Security.Client.GetById(客户端客户端)na C:\Users\devb0194\Source\workspace\cassandrawebtv3\CassandraWebTest.Business\Security\Client.cs:linha 63
em CassandraWebTest.Business.Security.usuarioautenticatao.Authenticate(usuarioautenticatao usuarioautenticatao)na C:\Users\devb0194\Source\workspace\CassandraWebTestV3\CassandraWebTest.Business\Security\usuarioautenticatao.cs:linha 95
em CassandraWebTest.Web.Controllers.LoginController.Authenticate(字符串usuario、字符串senha、布尔persistente)na C:\Users\devb0194\Source\workspace\cassandrawebtv3\Web\CassandraWeb
em System.Linq.Expressions.Expression.Condition(Expression test, Expression ifTrue, Expression ifFalse)
em Cassandra.Mapping.MapperFactory.GetExpressionToGetColumnValueFromRow(ParameterExpression row, CqlColumn dbColumn, Type pocoDestType)
em Cassandra.Mapping.MapperFactory.CreateMapperForPoco[T](RowSet rows, PocoData pocoData)
em Cassandra.Mapping.MapperFactory.CreateMapper[T](RowSet rows)
em Cassandra.Mapping.MapperFactory.<>c__DisplayClass1`1.<GetMapper>b__0(Tuple`2 _)
em System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
em Cassandra.Mapping.MapperFactory.GetMapper[T](String cql, RowSet rows)
em Cassandra.Mapping.Mapper.<>c__DisplayClass7`1.<FetchAsync>b__6(Statement s, RowSet rs)
em Cassandra.Mapping.Mapper.<>c__DisplayClass2`1.<>c__DisplayClass4.<ExecuteAsyncAndAdapt>b__1(Task`1 t2)
em Cassandra.Tasks.TaskHelper.DoNext[TIn,TOut](Task`1 task, Func`2 next)
em Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
em Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
em Cassandra.Mapping.Mapper.Fetch[T](Cql cql)
em Cassandra.Mapping.Mapper.Fetch[T](String cql, Object[] args)
em CassandraWebTest.Repository.Cassandra.CassandraRepository`1.GetById(T entity) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Repository\Cassandra\CassandraRepository.cs:linha 124
em CassandraWebTest.Business.Security.Client.GetById(Client Client) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Business\Security\Client.cs:linha 63
em CassandraWebTest.Business.Security.UsuarioAutenticacao.Authenticate(UsuarioAutenticacao usuarioAutenticacao) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\CassandraWebTest.Business\Security\UsuarioAutenticacao.cs:linha 95
em CassandraWebTest.Web.Controllers.LoginController.Authenticate(String usuario, String senha, Boolean persistente) na C:\Users\devb0194\Source\Workspaces\CassandraWebTestV3\Web\CassandraWebTest.Web\Controllers\LoginController.cs:linha 38