所以我的数据库设计存在这个问题。 我有四个表:服装,附件,图片和字体。
服装可以有多个附件,因此很容易映射:
Start
但是并发症与附件相关。我已经读过有多个可以为空的外键是不好的做法,但我无法弄清楚如何映射这个流程。
附加可以包含图像或字体。它永远不会同时拥有,必须至少有一个。
我的初级课程看起来像这样:
modelBuilder.Entity<Garment>().HasMany(m => m.Attachments).WithOptional().HasForeignKey(m => m.GarmentId);
但这并不强制执行任何操作。 EF有什么方法可以很好地处理这个问题吗?
答案 0 :(得分:1)
您可以使用Entity Framework Validation,尤其是IValidatableObject
public class Attachment : IValidatableObject
{
//...
public Image Image { get; set; }
public Font Font { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Image == null && Font == null)
{
yield return new ValidationResult
("Image or Font must be specified", new[] { "Image", "Font" });
}
if (Image != null && Font != null)
{
yield return new ValidationResult
("You cannot provide both an Image and a Font", new[] { "Image", "Font" });
}
}
}
如果确实需要并提供支持,则可以在数据存储上添加约束。对于SQL Server,请参阅CHECK CONSTRAINT。