我的问题很简单,与另一个问题(How to map an enum in a one-to-many relationship with NHibernate?)有关,尽管我在这里特别询问了实体框架的流畅API。
让我们说(同一个例子)我在我的模型中有这两个实体,一个参考类型(用户)和另一个枚举(角色)。
class User { int id; IList<Roles> Roles; }
enum Roles { Worker, Manager, Director }
或者为了清楚起见,在这个表示中......
[users] [ roles ]
+-----+ +-------+
| id | |user_id|
+-----+ +-------+
| value | <- [Represented by the enum]
+-------+
现在我想使用流畅的API将它映射到Entity Framework中的我的数据库,但是如果我尝试...
HasMany(x => x.Roles)
.Cascade.All()
.Table("UserRoles")
.Element("RolesEnum");
...它会失败,因为HasMany()
不是引用类型。
有没有办法在流畅的API中执行此操作,而不涉及将业务模型从枚举更改为类?
答案 0 :(得分:1)
这不能直接回答你的问题,但你有没有想过将角色枚举变成标志枚举并将其作为整数存储在User表中?
你可以这样做:
class User
{
public int Id { get; set; }
public UserRole Roles { get; set; }
}
[Flags]
public enum UserRole
{
Guest = 0,
Worker = 1,
Manager = 1 << 2,
Director = 1 << 3,
}
然后,要在用户表中存储多个角色,您可以像这样分配它们:
_user.Roles = UserRole.Worker | UserRole.Manager
答案 1 :(得分:1)
不,没有办法做到这一点。 EF(最多6.1)不支持映射值类型。
有几种方法可以做到:复杂类型,使用带有序列化列表的列......但它们是技巧,而不是直接的EF支持。