Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么此代码适用于SQL Server Express,但不适用于SQL Server CE?_C#_Sql Server_Entity Framework_Sql Server Ce_Nullreferenceexception - Fatal编程技术网

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

C# 为什么此代码适用于SQL Server Express,但不适用于SQL Server CE?,c#,sql-server,entity-framework,sql-server-ce,nullreferenceexception,C#,Sql Server,Entity Framework,Sql Server Ce,Nullreferenceexception,当我的目标提供程序是SQL Server CE时,我会得到一个NullReferenceException,但在SQL Server Express中它可以工作。当我试图访问注释时,返回…出现异常。模型非常简单,可以从代码中推断出来。谢谢你的帮助!顺便说一下,我使用的是实体框架代码First4.3和SQLServerCE4.0 使用与SQL Server Express相同的代码作为provider=运行正常 使用与SQL Server CE相同的代码作为提供程序=异常错误 此外,我对SQL

当我的目标提供程序是SQL Server CE时,我会得到一个
NullReferenceException
,但在SQL Server Express中它可以工作。当我试图访问
注释时,
返回…
出现异常。模型非常简单,可以从代码中推断出来。谢谢你的帮助!顺便说一下,我使用的是实体框架代码First4.3和SQLServerCE4.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;

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

SQLCE异常详细信息类似于:

空异常

SQLExpress异常详细信息类似于:

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

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


Database.SetInitializer(新的DropCreateDatabaseAlways())

您使用的是什么版本的SQL Server Compact?如果使用断点进行调试,您可以看到Persons是否包含任何内容吗?原因Persons.FirstOrDefault()如果找不到任何可能导致NullReference的内容,则可以返回NULL。与Comments.FirstOrDefault()相同。如果没有现成的代码,很难看到它,但您可以在调试时检查它。祝你好运。我从NUGET在我的项目上安装了它,在我的机器上,我从官方页面安装了它,所以最新的一个。。4.0.8852.1您是否尝试过签出关系,db-清理,从头开始-检查迁移,执行
更新数据库-Script
以查看您有什么?@PatrickDesjardins-嗯,当我将提供程序更改为SQL Express时,我确实运行了相同的代码,并且它可以正常工作。它不返回null,我得到了我想要的确切结果。我也在断点上检查了它,它确实包含数据,但它似乎没有在SQLCECheck中持久化,无法找到初始化sqlserver4.0compact的方法。如果你的模型不断改变,你也可以考虑数据库迁移,AndreiDrynov,谢谢你提供的信息!你肯定帮了大忙:)
    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; }
}