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

Posted

技术标签:

【中文标题】SQL CE 4 和 EF 6 代码优先中不支持默认值【英文标题】:Default values not supported in SQL CE 4 and EF 6 code-first 【发布时间】:2015-02-16 07:04:47 【问题描述】:

我有以下代码优先模型:

  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();
  

我收到一个异常,上面写着“不支持默认值”。此异常从DmlSqlGenerator.GenerateInsertSql 抛出并向上传播。

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

【问题讨论】:

这可能会有所帮助social.msdn.microsoft.com/Forums/en-US/… 你能把你的评论变成答案吗? 我已经做到了。在接受之前,您可以更新解决问题所需的确切答案,而不是链接实际答案可能会在将来有所帮助。 希望编辑没问题,我已经扩展了帖子本身的解决方案。谢谢,您的回答帮了我很大的忙! 还好。很高兴我能帮上忙。编码愉快。 【参考方案1】:

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

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

【讨论】:

以上是关于SQL CE 4 和 EF 6 代码优先中不支持默认值的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET EF5 代码优先不创建 SQL Server CE 数据库

Entity Framework 6 和 SQL Server CE,代码优先

Windows窗体应用程序中的连接字符串EF 4.1代码优先SQL紧凑

EF 4.1,代码优先:不属于“timestamp”或“rowversion”类型的属性不支持存储生成的模式“Computed”

错误 175:在配置中找不到指定的存储提供程序,或者对 EF4 和 SQL Server CE 4 无效

MVC3 代码优先 - EF4.1 不会自动创建表(使用 MySQL 和 Connector/Net 6.3.6。)