【发布时间】:2016-11-19 23:12:24
【问题描述】:
我正在使用 ServiceStack.Ormlite,并且还大量使用枚举的自动处理,从而将它们作为字符串存储在数据库中,但在检索时检索并很好地解析回枚举,因此我可以进行简单的类型比较 -例如,对于枚举类型“UserRoleEnum”的数据库/表类“User”中的属性“UserRole”(仅用于演示)。
这很好用.. 直到我想使用 enum 属性来定义多列唯一约束
CompositeIndexAttribute(bool unique, params string[] fieldNames);
喜欢:
[CompositeIndex(true, nameof(UserId), nameof(UserRole)]
public class User
{
public long UserId {get;set;}
public UserRoleEnum UserRole {get;set;
}
(根据: How to Create Unique Constraint with Multiple Columns using ServiceStack.OrmLite?)。
我什么时候得到:
System.Data.SqlClient.SqlException
Column 'UserRole' in table 'User' is of a type that is invalid for use as a key column in an index.
我目前看到的选项如下:
a) 将 UserRole 定义为表实体类中的字符串(而不是 UserRoleEnum )并失去 Enum 使用...。每次都必须手动测试该值以确认 db 值是我期望的值后面的业务逻辑
b) 继续使用 UserRoleEnum 但失去使用类属性声明多列唯一约束的能力,并且可能不得不使用后续的数据库迁移脚本手动创建这些?
有什么方法可以让枚举和多列约束很好地发挥作用,开箱即用?
【问题讨论】:
标签: enums servicestack multiple-columns unique-constraint ormlite-servicestack