首页 > 解决方案 > EF Core 枚举列表

问题描述

我正在研究在 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; }
}

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

标签: c#.net-coreentity-framework-coreblazor

解决方案


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

在 OnModelCreating 中:

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

您必须在下面为列表创建自己的 valuecomparer 示例:

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());

推荐阅读