ef4.1rc poco mvc3

DMPX 2011-03-31 05:16:36
操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidOperationException: 操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。

源错误:


行 28: {
行 29: _dbContext = GetCurrentContext();
行 30: return _dbContext.SaveChanges();
行 31: }
行 32:


源文件: D:\Project\Stone.Infrastructure.Repository.EF\DBContext\DbContextAdapter.cs 行: 30

堆栈跟踪:


[InvalidOperationException: 操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。]
System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) +8549974
System.Data.Entity.DbContext.SaveChanges() +159
Stone.Infrastructure.Repository.EF.DbContextAdapter.SaveChanges() in D:\Project\Stone.Infrastructure.Repository.EF\DBContext\DbContextAdapter.cs:30
Stone.Infrastructure.Repository.EF.RepositoryContext.SaveChanges() in D:\Project\Stone.Infrastructure.Repository.EF\RepositoryContext.cs:23
Stone.Infrastructure.Repository.EF.UnitOfWork.Commit() in D:\Project\Stone.Application.Services\UnitOfWork.cs:22
Stone.UI.Mvc.Areas.Admin.Controllers.EducationController.Create(Education education) in D:\Project\Stone.UI.Mvc\Areas\Admin\Controllers\EducationController.cs:55
lambda_method(Closure , ControllerBase , Object[] ) +162
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8862397
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.225
...全文
424 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
DMPX 2011-04-01
  • 打赏
  • 举报
回复


CREATE TABLE [dbo].[top_Articles](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CategoryId] [int] NOT NULL,
[Title] [nvarchar](50) NOT NULL,
[CreateDate] [datetime] NOT NULL,
[UpdateDate] [datetime] NULL,
CONSTRAINT [PK__top_Articles__0000000000000026] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[top_Articles] WITH CHECK ADD CONSTRAINT [FK_top_Articles_top_Categories] FOREIGN KEY([CategoryId])
REFERENCES [dbo].[top_Category] ([CategoryId])
GO

ALTER TABLE [dbo].[top_Articles] CHECK CONSTRAINT [FK_top_Articles_top_Categories]
GO


DMPX 2011-04-01
  • 打赏
  • 举报
回复
奇怪的是用SqlServerCe.4.0一直没出现这个问题,更换sql server 2008时就经常出现这种错误
DMPX 2011-04-01
  • 打赏
  • 举报
回复
ICollection是不为空的,但出错的时候 读取外键 @item.Category.Name 出现System.NullReferenceException
子夜__ 2011-04-01
  • 打赏
  • 举报
回复
ICollection为空?

赋值的时候要new 一个 object Just like List<T> OR anything.
DMPX 2011-04-01
  • 打赏
  • 举报
回复
实体关系是这样的

public class Article
{
public int Id {get;set;}
public int CategoryId{get;set;}
public string Title{get;set;}
public virtual Category Category { get; set; }
}

public class Category {
public int CategoryId{get;set;}
public string Name{get;set;}
public virtual ICollection<Article> Articles { get; set; }
}

为什么ef4 导航属性取值会为空呢?
DMPX 2011-04-01
  • 打赏
  • 举报
回复
没有NULL值,数据库字段不允许外键为NULL值
porschev 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dmpx 的回复:]

读取外键 @item.Category.Name 出现异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

我从新更新一下DLL后又恢复正常,有时间经常发布了两三条新闻后又会出现这种情况
[/Quote]

插入后。。。看看你新闻表。。

看是不是有null值
DMPX 2011-04-01
  • 打赏
  • 举报
回复
读取外键 @item.Category.Name 出现异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

我从新更新一下DLL后又恢复正常,有时间经常发布了两三条新闻后又会出现这种情况
DMPX 2011-04-01
  • 打赏
  • 举报
回复
外键为int类型,而且在调试的时候发现是有值的
子夜__ 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dmpx 的回复:]

数据库用SqlServerCe.4.0很正常,但改用sql server 2008 r2时,时不时的出现上面问题,经常隔半个小时左右自动恢复正常
[/Quote]
数据库外键为null的时候设置一下default值。
DMPX 2011-03-31
  • 打赏
  • 举报
回复
数据库用SqlServerCe.4.0很正常,但改用sql server 2008 r2时,时不时的出现上面问题,经常隔半个小时左右自动恢复正常

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧