忽略属性不起作用 CassandraCSharpDriver
Ignore Attribute does't work CassandraCSharpDriver
我正在使用实体模型中的一些属性来维护关系,我正在使用 [Ignore]
来忽略 table 中的 属性。
public class User : IdentityUser<Guid>
{
[Ignore]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CommonName { get; set; }
public string ProfilePhoto { get; set; }
public bool IsDeleted { get; set; }
[Ignore]
public virtual ICollection<UserRole> UserRoles { get; set; }
}
var User = new Table<User>(dataSession);
User.CreateIfNotExists();
当我尝试使用上面的代码创建时出现错误。
问题:我是否使用了错误的脚本来创建table或错误的忽略方式?
提前致谢
查看此 Cassandra 到 C# 的类型列表。
https://docs.datastax.com/en/developer/csharp-driver/3.7/features/datatypes/
可以使用 IEnumerable 代替 ICollection,甚至可以使用 IDictionary,具体取决于您打算执行 IDictionary 的目的。
检查您是否为 Ignore
属性使用了正确的命名空间。 Cassandra.Mapping.Attributes.Ignore
是正确的,另一个已弃用。
public class Program
{
public static void Main()
{
var cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
var session = cluster.Connect();
var User = new Table<User>(session, MappingConfiguration.Global, "users", "testks");
User.CreateIfNotExists();
var u = new User
{
Id = Guid.NewGuid(),
Password = "123",
FirstName = "123",
LastName = "123",
CommonName = "123",
ProfilePhoto = "321",
IsDeleted = false,
UserRoles = new List<UserRole>
{
new UserRole
{
Text = "text"
}
}
};
User.Insert(u).Execute();
var result = User.First(l => l.Id == u.Id).Execute();
Console.WriteLine(JsonConvert.SerializeObject(result));
Console.ReadLine();
User.Where(l => l.Id == u.Id).Delete().Execute();
}
}
public class User : IdentityUser<Guid>
{
[Cassandra.Mapping.Attributes.Ignore]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CommonName { get; set; }
public string ProfilePhoto { get; set; }
public bool IsDeleted { get; set; }
[Cassandra.Mapping.Attributes.Ignore]
public virtual ICollection<UserRole> UserRoles { get; set; }
}
public class IdentityUser<T>
{
[Cassandra.Mapping.Attributes.PartitionKey]
public T Id { get; set; }
}
public class UserRole
{
public string Text { get; set; }
}
运行 上面针对带有 C# 驱动程序 3.10.1
的 Cassandra 3.0.18
的代码似乎可以正常工作。 Password
和 UserRoles
将不存在于 table 架构中,并且在使用 Linq2Cql
执行 SELECT
语句时它们都将是 null
。
我正在使用实体模型中的一些属性来维护关系,我正在使用 [Ignore]
来忽略 table 中的 属性。
public class User : IdentityUser<Guid>
{
[Ignore]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CommonName { get; set; }
public string ProfilePhoto { get; set; }
public bool IsDeleted { get; set; }
[Ignore]
public virtual ICollection<UserRole> UserRoles { get; set; }
}
var User = new Table<User>(dataSession);
User.CreateIfNotExists();
当我尝试使用上面的代码创建时出现错误。
问题:我是否使用了错误的脚本来创建table或错误的忽略方式?
提前致谢
查看此 Cassandra 到 C# 的类型列表。
https://docs.datastax.com/en/developer/csharp-driver/3.7/features/datatypes/
可以使用 IEnumerable 代替 ICollection,甚至可以使用 IDictionary,具体取决于您打算执行 IDictionary 的目的。
检查您是否为 Ignore
属性使用了正确的命名空间。 Cassandra.Mapping.Attributes.Ignore
是正确的,另一个已弃用。
public class Program
{
public static void Main()
{
var cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
var session = cluster.Connect();
var User = new Table<User>(session, MappingConfiguration.Global, "users", "testks");
User.CreateIfNotExists();
var u = new User
{
Id = Guid.NewGuid(),
Password = "123",
FirstName = "123",
LastName = "123",
CommonName = "123",
ProfilePhoto = "321",
IsDeleted = false,
UserRoles = new List<UserRole>
{
new UserRole
{
Text = "text"
}
}
};
User.Insert(u).Execute();
var result = User.First(l => l.Id == u.Id).Execute();
Console.WriteLine(JsonConvert.SerializeObject(result));
Console.ReadLine();
User.Where(l => l.Id == u.Id).Delete().Execute();
}
}
public class User : IdentityUser<Guid>
{
[Cassandra.Mapping.Attributes.Ignore]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string CommonName { get; set; }
public string ProfilePhoto { get; set; }
public bool IsDeleted { get; set; }
[Cassandra.Mapping.Attributes.Ignore]
public virtual ICollection<UserRole> UserRoles { get; set; }
}
public class IdentityUser<T>
{
[Cassandra.Mapping.Attributes.PartitionKey]
public T Id { get; set; }
}
public class UserRole
{
public string Text { get; set; }
}
运行 上面针对带有 C# 驱动程序 3.10.1
的 Cassandra 3.0.18
的代码似乎可以正常工作。 Password
和 UserRoles
将不存在于 table 架构中,并且在使用 Linq2Cql
执行 SELECT
语句时它们都将是 null
。