为什么此代码适用于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 CE错误详细信息比使用SQL Server Express作为提供程序时要模糊得多因此会造成混乱和方向模糊。
SQLCE异常详细信息类似于:
NullException
SQLExpress异常详细信息类似于:
自创建数据库以来,支持"MyContext"上下文的模型已更改。考虑使用代码优先迁移来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)
解决方案是:通过添加以下代码来同步模型:
Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());