我在一个.NET项目中使用EF Core和Azure Cosmos DB。我有一个User实体,其中包含AuditStandardUserInfo实体的集合。User实体和AuditStandardUserInfo实体都具有AuditCompetence类型的Competence属性(枚举)。我想在Cosmos DB中配置EF Core以将Competence属性序列化为字符串,但到目前为止我尝试的建议解决方案遇到了问题。
下面是我的代码的相关部分:
public enum AuditCompetence
{
None,
Low,
Medium,
High
}
public class User
{
public string UserId { get; set; } = Guid.NewGuid().ToString();
// ... other properties ...
public ICollection<AuditStandardUserInfo> UserAuditStandards { get; set; } = new List<AuditStandardUserInfo>();
public AuditCompetence? Competence { get; set; }
}
public class AuditStandardUserInfo
{
public string AuditStandardId { get; set; }
// ... other properties ...
public AuditCompetence Competence { get; set; }
}
public class MyDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// ... configuration code ...
}
}
我尝试在OnModelCreating方法中使用HasConversion()方法,以及将Newtonsoft.Json库中的[JsonConverter(typeof(StringEnumConverter))]属性应用于AuditCompetence枚举,但这些解决方案都不适用于我。只有直接位于User下的枚举使用HasConversation()正确转换,而不是UserAuditStandards中的枚举
有没有人可以指导我如何正确配置EF Core,以便在Cosmos DB中将Competence属性序列化为字符串,同时用于User实体和AuditStandardUserInfo实体?
1条答案
按热度按时间pu3pd22g1#
如何在Cosmos DB中配置EF Core以将枚举序列化为字符串以处理复杂属性
以下是我的步骤:
*User类有一个名为
Competence
的AuditCompetence
类型的属性,您希望在Cosmos DB中将其序列化为字符串。*DbContext的子类MyDbContext用于控制数据库交互。
DbSet
属性,表示相应实体类型的数据库表。UseCosmos
方法用于配置OnConfiguring
方法中的Cosmos DB连接。OnModelCreating
方法中,配置数据库的模型。User
实体的Competence
字段被设置为在使用.HasConversion<string>()
方法存储在数据库中时转换为字符串。这是如何确保枚举在Cosmos DB中序列化为字符串。下面是我尝试的代码:
输出: