当没有必需属性时,Breeze“属性是必需的”EF 6.1.3

时间:2015-08-13 15:21:37

标签: entity-framework breeze

从EF 6.1.1更新到6.1.3后,breeze开始在我的一个属性上执行此操作。

这是对象结构:

public class Class1
{
    public virtual string myProperty { get; set; }
    // other properties 
}

public class Class2 : Class1
{
    // other properties 
}

public class Class3 : Class1
{
    [Required]
    public override string myProperty { get; set; }
    // other properties 
}

我正在微风中创建一个“Class2”对象并尝试保存它。我没有在任何地方设置“myProperty”,根本没有链接到它,因为它不需要在此页面上。当我保存更改时,我收到一条消息“myProperty is required”。

回滚到EF 6.1.1,一切正常,但我将该更新用于其他目的。

编辑:我发现在更新到6.1.3之后,属性中的“Class1”的元数据中有一个可为空的:false。我可以很容易地假设问题存在但是为什么会生成以及如何避免它,默认情况下字符串在技术上是可以为空的。

1 个答案:

答案 0 :(得分:0)

首先,它不依赖于Breeze。

EF 6.1.3
它恰好发生在你写的东西上,对我来说是EF的BUG 我使用此模型/上下文/测试来重现错误

public class Class1
{
    [Key]
    public int Id { get; set; }

    public virtual string MyProperty { get; set; }
    // other properties 
}

public class Class3 : Class1
{
    [Required]
    public override string MyProperty { get; set; }

    public string Class3Prop { get; set; }
}


public class TestContext : DbContext
{
    public TestContext(DbConnection connection) : base(connection, true) { }

    public DbSet<Class1> C1s { get; set; }
    public DbSet<Class3> C3s { get; set; }

}

    public static void Run(DbConnection connection)
    {
        using (TestContext db = new TestContext(connection))
        {
            // MyProperty not specified
            db.C1s.Add(new Class1());
            db.SaveChanges();   // Here in EF 6.1.3 is raised an exception because MyProperty is required but we did not mark it as Required
        }
    }

数据库只包含1个表(当然还有__MigrationHistory)。

dbo.Class1(Id autoincrement,MyProperty varchar not null,Class3Prop varchar null,Discriminator varchar not null)。

因此我们永远无法插入null MyProperty。

EF 6.1.1
一切都按预期工作。
添加C1有效,添加C3(不设置MyProperty)不起作用。

数据库包含与上面相同的表,但MyProperty可以为空。

关于6.1.3的其他考虑因素
通过流畅的界面配置它的行为不会改变 此外,如果在Class1中指定MaxLength 30,在Class3中指定15,则字段将为varchar 15 对我来说绝对是一个EF 6.1.3错误(我把它发布在CodePlex上)