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”