Sql server Can实体框架';s的数据库或模型进入不一致状态?

Sql server Can实体框架';s的数据库或模型进入不一致状态?,sql-server,entity-framework,Sql Server,Entity Framework,我正在使用EF4.1构建一个应用程序,我想知道为EF应用程序提供服务的底层数据库是否会进入不一致的状态。我的意思是,如果在实体的创建/修改/删除过程中出现异常,EF可能会被破坏,并将一些不应该为null的值保留为null,并保存数据库的某些部分。(特别是在EF上下文中出现异常的情况下) 让我举一个例子: 我有两个独立的实体类型,A和B,A和B有1-1的关联。我创建了对象A,在创建对象B的过程中,出现了一个问题,它引发了一个异常。之后,仍然会调用上下文的SaveChanges方法。(这只是一个示例

我正在使用EF4.1构建一个应用程序,我想知道为EF应用程序提供服务的底层数据库是否会进入不一致的状态。我的意思是,如果在实体的创建/修改/删除过程中出现异常,EF可能会被破坏,并将一些不应该为null的值保留为null,并保存数据库的某些部分。(特别是在EF上下文中出现异常的情况下)

让我举一个例子: 我有两个独立的实体类型,A和B,A和B有1-1的关联。我创建了对象A,在创建对象B的过程中,出现了一个问题,它引发了一个异常。之后,仍然会调用上下文的
SaveChanges
方法。(这只是一个示例,可能存在其他关联类型、继承层次结构等)是否可能发生损坏,或者是否存在防止不一致的层。当然应该有SQL server约束和空检查。但我启动了数据库,有时,我会收到一个异常,告诉我不能为null的东西(关联)实际上为null,正如定义为不可为null的那样,因为我没有处理该值为null的问题(想象一下前面的例子,引用
A.B
为null),我的应用程序/站点崩溃了。原因可能是什么?没有其他应用程序或实例以任何方式访问数据库。最近我遇到了这种情况,我想知道其根本原因。

DbContext.SaveChanges()将生成的SQL语句包装在事务中。所以,要么所有事情都被提交,要么就被回滚。您可能希望检查数据库中的关系和约束。另外,使用Sql Server探查器查看实际发送到数据库的内容也会有所帮助