这可能是我花了好几个小时解决很长时间的最大浪费时间问题 .
var db = new hublisherEntities();
establishment_brands est = new establishment_brands();
est.brand_id = 1;
est.establishment_id = 1;
est.price = collection["price"];
est.size = collection["size"];
db.establishment_brands.Add(est);
db.SaveChanges();
这给了我一个错误
值不能为空 . 参数名称:source
堆栈跟踪
[ArgumentNullException:Value不能为null . 参数名称:source] System.Linq.Enumerable.Any(IEnumerable1 source,Func2 predicate)4083335 System.Data.Entity.Internal.InternalContext.WrapUpdateException(UpdateException updateException)87 System.Data.Entity.Internal.InternalContext.SaveChanges()193 System.Data.Entity.Internal.LazyInternalContext.SaveChanges()33 System.Data.Entity.DbContext.SaveChanges()20 ......
我只想在表中添加一个实体 . ORM是EF .
13 回答
当我有一个实体属性的无效类型时,我收到此错误 .
当我删除属性时,错误停止发生 .
在我的情况下,在IIS上配置Web应用程序时弹出问题,当触发任何记录上的更新命令时,会生成此错误 .
这是App_Data上的权限问题,设置为只读 . 右键单击该文件夹,取消选中“只读”复选框,即可完成 . 顺便说一句,为了测试目的,我使用的是App_Data文件夹中的localdb数据库 .
我有一段时间回来了,答案不一定是你所期待的 . 当您的连接字符串错误时,通常会出现此错误消息 .
猜测一下,你需要这样的东西:
发生的事情是它正在寻找错误位置的数据源;实体框架指定它略有不同 . 如果您发布连接字符串和EF配置,那么我们可以检查 .
DbContext内部的某个值是
IEnumerable
,并使用Any()
(或Where()
或Select()
或任何其他LINQ方法)进行查询,但此值为null
.找出是否将查询放在一起(在示例代码之外的某处)使用LINQ方法,或者使用
IEnumerable
作为NULL参数 .我的理由与其他人不同,所以我想我会把它发布给其他可能有这个问题的人 .
我在一个DbSet实例上调用Count,其中包含一个null过滤器,即
我发现在这里传递null导致错误,所以我现在调用无参数方法,如果过滤器为null:
这为我排序了问题 . 对于DbSet上的任何其他方法,这可能是一个问题 .
就像一个FYI,有人可能会发现它很有用 . 我差不多2天追逐我的尾巴这个错误并且总是在考虑可能是问题的类,最后我发现它非常愚蠢的问题,它是在mypage.ascx中我的标记(HTML)代码 . 问题是我有一个
<asp:EntityDataSource>
,这有一个包含属性,我在这里列出了一些其他表,错误的是最近从数据库中删除了一个表,我从未注意到它与其他实体返回null . 我刚从包含列表中删除了愚蠢的表格,我很高兴 . 希望这可以帮助别人 .解决了以下解决方案
1)右键单击edmx文件,选择Open with,XML editor
2)在edmx:StorageModels元素中找到实体
3)完全删除DefiningQuery
4)重命名商店:Schema =“dbo”到Schema =“dbo”(如果存在)
5)删除商店:名称属性
如果其他人在这里遇到我的DB First Entity Framework设置问题 .
简而言之,我需要重载Entities构造函数以接受连接字符串,原因是能够使用Asp.Net Core依赖注入容器从appsettings.json中提取连接字符串,而不是从App.config中神奇地获取它调用无参数构造函数时的文件 .
我忘了添加调用来在新的重载中初始化我的DbSet . 所以自动生成的无参数构造函数看起来像这样:
我的新重载看起来像这样:
解决方案是添加自动生成的代码所处理的初始化程序,这是一个简单的错过的步骤:
这真的让我陷入了一个循环,因为我们的Respository中使用DbContext的一些调用工作正常(那些不需要那些初始化DBSets的调用),而其他调用抛出了OP中描述的运行时错误 .
确保将存储库注入服务的构造函数中 . 这解决了我 . :: smacks额头::
它可能像我的情况一样愚蠢,其中savechanges错误bcoz db没有外键和关联被添加到EDM表 . 我在db中添加了外键并重新生成了EDM以进行修复 .
我看到的错误如下:案例1 - >使用DBContext进行EDM时Message = Value不能为null . 参数名称:System.Linq.Enumerable.Any [TSource]的源代码(IEnumerable
1 source, Func
2谓词)情况2 - >使用ObjectContext进行EDM时Message =无法更新EntitySet'Contact',因为它具有DefiningQuery,并且元素中不存在支持当前操作的元素 .
(只是想把它扔到那里,以防它帮助某人) .
在MVC中,View屏幕是调用方法,它在Controller或Repository.cs中,并为CSHTML中的任何控件分配返回值,但该方法实际上没有在.cs / controller中实现,那么CSHTML将抛出NULL参数异常
我的错误是在尝试调用Razor视图中的SubChildEntities时忘记将.ThenInclude(s => s.SubChildEntities)添加到父.Include(c => .S.SubChildEntities)到Controller操作 .
应该注意的是,Visual Studio 2017社区的IntelliSense不会在.ThenInclude()中的lambda表达式中选取SubChildEntities对象 . 它确实成功编译和执行 .
我知道距离问题2013年还有很长的路要走,但是如果在将ASP.NET 5应用程序迁移到ASP.NET Core时没有启用延迟加载,然后尝试升级到实体框架Core 2.x(来自EF 6) . Entity Framework Core has moved lazy loading proxy support to a separate package,所以你必须安装它 .
如果您加载的所有内容都是Entity Framework Core Sql Server软件包(它可以很好地打开Entity Framework),则尤其如此 .
安装代理程序包之后,然后,正如文档所说,在DbContext选项构建器上调用
.UseLazyLoadingProxies()
(在启动DI设置部分,或者在配置DbContext的任何地方),抛出上述异常的导航属性将停止抛出它,并将作为实体框架6使用 .