EF Core 枚举列表

Hes*_*esh 8 c# entity-framework-core .net-core blazor

我正在开发小型应用程序,在 Entity Framework Core 中组织酒店预订。我需要添加有关每个房间的床位数量和类型的信息。我在想,我决定枚举列表比将其存储在单独的表中更好。但我不知道如何实现它

public enum Bed
{
    Single = 1,
    Double = 2,
}

public class Room : IEntity
{
   [Key]
   public int Id { get; set; }
        
   public string RoomIdentifier { get; set; }
   public ICollection<Bed> Beds { get; set; }
        
   public int Floor { get; set; }
   public double Price { get; set; }

   public bool IsFree { get; set; }
   public bool IsOutOfService { get; set; }
   public bool ShouldBeCleaned { get; set; }
        
   public ICollection<RoomReservation> RoomReservations { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?我还想将其保存为像 (1,2,1,2) 这样的字符串,然后解析它以接收房间中床的数量和类型。非常感谢您的帮助!

Ric*_*ley 9

这是一个由对象名称组成的示例,希望对您有所帮助。

在模型创建中:

modelBuilder.Entity<Room>()
        .Property(e => e.BedList)
        .HasConversion(
            v => string.Join(',', v),
            v => v.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<Bed>())
        .Metadata.SetValueComparer(valueComparer);
Run Code Online (Sandbox Code Playgroud)

您必须在下面创建自己的值比较器示例以获得列表:

var valueComparer = new ValueComparer<ICollection<string>>(
                    (c1, c2) => c1.SequenceEqual(c2),
                    c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
                    c => (ICollection<string>)c.ToHashSet());
Run Code Online (Sandbox Code Playgroud)