0

IValidatableObject を実装する POCO オブジェクトがあります。

public class Documentation : IValidatableObject
{
    [Key]
    public int DocumentationId { get; set; }

    [ForeignKey("Project")]
    public int ProjectId { get; set; }

    public virtual Project Project { get; set; }

    public string FileGuid { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        return new[] { new ValidationResult("File has not been uploaded", new[] { "FileGuid" }) };
    }

}

DbDomainService が検証を実行しないのに、DbContext が検証を実行するのはなぜですか?

このテストは DbContext に合格します。

    [TestMethod, ExpectedException(typeof(DbEntityValidationException))]
    public void TestDbContext()
    {
        SampleDbContext ctx = new SampleDbContext();
        var p = new Project()
        {
            ProjectName = "UnitTest",
        };
        var d = new Documentation()
        {
            FileGuid = "UnitTestDoc",
        };
        p.Documentations = new List<Documentation>();
        p.Documentations.Add(d);
        ctx.Projects.Add(p);
        ctx.SaveChanges();
    }

これはそうではありませんが(例外はスローされません):

    [TestMethod, ExpectedException(typeof(ValidationException))]
    public void TestDbDomain()
    {
        SampleDomainService svc = new SampleDomainService();
        svc.Initialize(ServiceProvider.CreateDomainServiceContext());
        var p = new Project()
        {
            ProjectName = "UnitTest",
        };
        var d = new Documentation()
        {
            FileGuid = "UnitTestDoc",
            Project = p,
        };
        ChangeSet changeSet = new ChangeSet(
            new [] {
                new ChangeSetEntry(1, p, null, DomainOperation.Insert),
                new ChangeSetEntry(2, d, null, DomainOperation.Insert),
            }
        );
        svc.Submit(changeSet);
    }

サンプルコードはこちら

4

1 に答える 1