EntityFramework,数据库设计表具有可空外键

时间:2016-02-11 13:25:59

标签: c# entity-framework

所以我的数据库设计存在这个问题。 我有四个表:服装附件图片字体

服装可以有多个附件,因此很容易映射:

Start

但是并发症与附件相关。我已经读过有多个可以为空的外键是不好的做法,但我无法弄清楚如何映射这个流程。

附加可以包含图像字体。它永远不会同时拥有,必须至少有一个。

我的初级课程看起来像这样:

modelBuilder.Entity<Garment>().HasMany(m => m.Attachments).WithOptional().HasForeignKey(m => m.GarmentId);

但这并不强制执行任何操作。 EF有什么方法可以很好地处理这个问题吗?

1 个答案:

答案 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