为什么此代码适用于SQL Server Express,但*不适用于*SQL Server CE

本文关键字:SQL 适用于 Server 不适用 CE 为什么 Express 代码 | 更新日期: 2023-09-27 18:30:05

当我的目标提供程序是SQL Server CE时,我会得到一个NullReferenceException,但使用SQL Server Express可以工作。当我尝试访问Comments时,return...上出现异常。模型非常简单,可以从代码中推断出来。谢谢你的帮助!我首先使用实体框架代码4.3和SQL Server CE 4.0。

  • 在SQL Server Express中使用与provider相同的代码=运行良好的

  • 使用与SQL Server CE相同的代码作为提供程序=异常错误

此外,我对SQL Server CE没有任何问题。它在我的机器上运行,我首先用实体框架代码甚至asp.net授权完成了单表操作。我从来没有在相关实体上做过这样的嵌套添加/删除,所以我很好奇为什么这不起作用。。

            db.Persons.Add(new Person()
            {
                FullName = "JC Viray",
                Comments = new List<Comment>(){
                         new Comment(){CommentContent="Hello!"},
                         new Comment(){CommentContent="World!"}
            }
            });
            db.SaveChanges();
            return db.Persons.FirstOrDefault().Comments.FirstOrDefault().CommentContent;

让我感到困惑的是,在SQLServerExpress中,如果我检查数据,注释就在那里。

在SQLServerCE中,只有Persons表具有数据,而Comments表为空。

编辑:

如果有帮助的话,下面是模型:

    public class Person
{
    [Key]
    public int PersonId { get; set; }
    public string FullName { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}
public class Comment
{
    [Key]
    public int CommentId { get; set; }
    public string CommentContent { get; set; }
    [ForeignKey("Person")]
    public int PersonId { get; set; }
    public virtual Person Person { get; set; }
}

为什么此代码适用于SQL Server Express,但*不适用于*SQL Server CE

问题是:SQL CE错误详细信息比使用SQL Server Express作为提供程序时要模糊得多因此会造成混乱和方向模糊。

SQLCE异常详细信息类似于:

NullException

SQLExpress异常详细信息类似于:

自创建数据库以来,支持"MyContext"上下文的模型已更改。考虑使用代码优先迁移来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)

解决方案是:通过添加以下代码来同步模型:

Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());