SQL CE 4 和 EF 6 代码优先不支持默认值

Default values not supported in SQL CE 4 and EF 6 code-first

我有以下代码优先模型:

  public class TestContext : DbContext
  {
    public TestContext() : base("Data Source=Test.db") { }
    public DbSet<Item> Items { get { return this.Set<Item>(); } }
  }

  public class Item
  {
    public Int32 Id { get; set; }

    public virtual ICollection<SubItem1> SubItems1 { get; set; }
    public virtual ICollection<SubItem2> SubItems2 { get; set; }
  }
  public class SubItem1
  {
    public Int32 Id { get; set; }
    public Int32 ItemId { get; set; }
    public Item Item { get; set; }
    public String Test { get; set; }
  }
  public class SubItem2
  {
    public Int32 Id { get; set; }
    public Int32 ItemId { get; set; }
    public Item Item { get; set; }
    public Int32 TestCode { get; set; }
  }

像这样使用时:

  using (var context = new TestContext())
  {
    context.Items.Add(new Item());
    context.SaveChanges();
  }

我收到一个异常 "Default values not supported"。此异常从 DmlSqlGenerator.GenerateInsertSql 抛出并向上传播。

最初我得到了更复杂架构的异常,但我能够将其归结为这一点。这是 SQL CE 的限制吗?我怎样才能绕过它并拥有一个主项和两组从属项,每个从属项都有标量值?

这是 CE 和 EF 的已知问题,但 here is a link to the MSDN forums 描述了问题和解决方案。

它的要点是不要有一个只有键的实体,无论是唯一的主键还是主键和外键。添加标量列可消除异常。