0

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

  • 使用与 SQL Server Express 相同的代码作为提供程序 = 运行良好

  • 使用与 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;

让我感到困惑的是,在 SQL Server Express 中,如果我检查数据,就会出现注释。

在 SQL Server CE 中,只有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; }
}
4

1 回答 1

1

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

SQLCE 异常详细信息类似于:

空异常

SQLExpress 异常详细信息类似于:

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

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

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

于 2012-04-05T20:37:22.050 回答