.net 不可为null的枚举和具有null值的数据的设计问题

.net 不可为null的枚举和具有null值的数据的设计问题,.net,oop,design-patterns,database-design,model,.net,Oop,Design Patterns,Database Design,Model,在我的web应用程序中,我使用带有枚举属性的模型。例如: public class SomeObject { public Guid ID { get; set; } public string Name { get; set; } public Color Color { get; set; } } public enum Color { blue, red } 颜色是必填字段形式。基于该模型使用EF Core创建了一个颜色列不为null的表 但是,

在我的web应用程序中,我使用带有枚举属性的模型。例如:

public class SomeObject 
{
   public Guid ID { get; set; }
   public string Name { get; set; }
   public Color Color { get; set; }
}
public enum Color 
{
     blue,
     red
}
颜色是必填字段形式。基于该模型使用EF Core创建了一个颜色列不为null的表

但是,我尝试导入到表中的一些历史数据不包含颜色的空值

从设计的角度来看,什么是更好的解决方案:

  • 更改模型以使颜色为空,并在UI和内部API上添加额外的验证以防止空值
  • 将空值添加到枚举本身
  • 使用空颜色为导入的数据指定一些默认值

  • 我不喜欢这些选项中的任何一个,但就设计而言,哪一个是最好的呢?

    Color
    列中带有
    null
    的记录有效地代表了未知颜色的对象。因此,显然要做的事情是向enum
    Color
    添加一个
    Unknown
    值。然后更改前端以允许显示这些对象,但不使用设置为“未知”的颜色保存。

    color
    列中
    null
    的记录有效地表示未知颜色的对象。因此,显然要做的事情是向enum
    Color
    添加一个
    Unknown
    值。然后更改前端,以允许显示这些对象,但不使用设置为“未知”的颜色保存这些对象。

    默认值是最小的侵入性值,因为它既不更改模型也不更改枚举;但最终这个问题是基于观点的,答案会根据具体情况而有所不同。默认值是入侵性最小的,因为它既不会更改模型也不会更改枚举;但归根结底,这个问题是基于意见的,答案会因人而异。