这可能是我花了好几个小时解决很长时间的最大浪费时间问题。
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。参数名称:来源] System.Linq.Enumerable.Any(IEnumerable
1 source, Func
2谓词) +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。
答案 0 :(得分:140)
DbContext中的某个位置是IEnumerable
的值,并使用Any()
(或Where()
或Select()
或任何其他LINQ方法)查询,但此值是null
。
查看是否将查询放在一起(在示例代码之外的某处)使用LINQ方法,或者使用IEnumerable
作为NULL参数。
答案 1 :(得分:35)
我有一段时间回来了,答案不一定是你所期待的。当您的连接字符串错误时,通常会出现此错误消息。
猜测一下,你需要这样的东西:
<connectionStrings>
<add name="hublisherEntities" connectionString="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
正在发生的事情是它正在寻找错误位置的数据源;实体框架指定它略有不同。如果您发布连接字符串和EF配置,那么我们可以检查。
答案 2 :(得分:10)
我的理由与其他人不同,所以我想我会把它发布给其他可能有这个问题的人。
我在一个DbSet实例上调用了Count,其中包含一个null的过滤器,即
dbSet.Count(null);
我发现在这里传递null会导致错误,所以如果过滤器为null,我现在调用无参数方法:
if (filter == null)
{
return dbSet.Count();
}
else
{
return dbSet.Count(filter);
}
这为我排序了这个问题。对于DbSet上的任何其他方法,这可能是一个问题。
答案 3 :(得分:3)
就像一个FYI,有人可能会发现它很有用。我差不多2天追逐我的尾巴这个错误并且总是在考虑可能是问题的类,最后我发现它非常愚蠢的问题,它是在mypage.ascx中我的标记(HTML)代码。问题是我有一个<asp:EntityDataSource>
,这有一个包含属性,我在这里列出了一些其他的表,错误的是最近从数据库中删除了一个表,我从来没有注意到它和其他人一起返回null实体。我刚从包含列表中删除了愚蠢的表格,我很高兴。希望这可以帮助别人。
答案 4 :(得分:1)
使用 .Count()
而不检查 null
是导致此错误的一个重要原因。
解决办法:
if(someList != null & someList.Count()>0)
{
//Now, put your hackable code here!
}
答案 5 :(得分:1)
确保将存储库注入到服务的构造函数中。那为我解决了。 ::前额额头::
答案 6 :(得分:1)
如果其他人在这里遇到我的DB First Entity Framework设置问题。
长话短说,我需要重载Entities构造函数以接受连接字符串,原因是能够使用Asp.Net Core依赖注入容器从appsettings.json中提取连接字符串,而不是神奇地从appsettings.json中获取它调用无参数构造函数时的App.config文件。
我忘了添加调用以在新的重载中初始化我的DbSet。所以自动生成的无参数构造函数看起来像这样:
public MyEntities()
: base("name=MyEntity")
{
Set1 = Set<MyDbSet1>();
Set2 = Set<MyDbSet2>();
}
我的新重载看起来像这样:
public MyEntities(string connectionString)
: base(connectionString)
{
}
解决方案是添加自动生成的代码所处理的初始化程序,这是一个简单的错过的步骤:
public MyEntities(string connectionString)
: base(connectionString)
{
Set1 = Set<MyDbSet1>();
Set2 = Set<MyDbSet2>();
}
这真的让我接受了一个循环,因为我们的Respository中使用DbContext的一些调用工作得很好(那些不需要那些初始化的DBSets的调用),其他调用抛出了OP中描述的运行时错误。 / p>
答案 7 :(得分:1)
解决了以下解决方案
答案 8 :(得分:0)
当我的实体属性的类型无效时,我收到此错误。
public Type ObjectType {get;set;}
当我删除该属性时,错误停止发生。
答案 9 :(得分:0)
在我的情况下,在IIS上配置Web应用程序时弹出问题,当触发任何记录上的更新命令时,会生成此错误。
App_Data上的权限问题设置为只读。右键单击该文件夹,取消选中“只读”复选框,即可完成。顺便说一句,出于测试目的,我使用的是位于App_Data文件夹中的localdb数据库。
答案 10 :(得分:0)
在MVC中,View屏幕是调用Controller或Repository.cs中的方法,并将返回值赋给CSHTML中的任何控件,但该方法实际上没有在.cs / controller中实现,那么CSHTML将抛出NULL参数异常< / p>
答案 11 :(得分:0)
我的错误是忘记了在尝试在Razor视图中调用SubChildEntities时将.ThenInclude(s => s.SubChildEntities)添加到父级.Include(c => c.SubChildEntities)到Controller操作中的方法。
var <parent> = await _context.Parent
.Include(c => c.<ChildEntities>)
.ThenInclude(s => s.<SubChildEntities>)
.SingleOrDefaultAsync(m => m.Id == id);
应注意,Visual Studio 2017社区的IntelliSense不会在.ThenInclude()的lambda表达式中拾取SubChildEntities对象。它确实可以成功编译并执行。
答案 12 :(得分:0)
我知道这距离问题的2013年还有很长的路要走,但是如果将ASP.NET 5应用迁移到ASP.NET Core时没有启用延迟加载,则会出现此症状升级到Entity Framework 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选项构建器(在“启动DI设置”部分,或配置DbContext的任何位置)上调用.UseLazyLoadingProxies()
,并调用抛出的导航属性上述异常将停止抛出该异常,并且将像过去使用Entity Framework 6一样工作。
答案 13 :(得分:0)
在数据库中占一行,并使该行中的所有列都为null,例如“ NULL”。现在,使用try catch或其他方式传递该NULL值。
答案 14 :(得分:0)
我刚在.Net Core 2.2实体框架中遇到此确切错误,因为我的set;
中没有DbContext
,就像这样:
public DbSet<Account> Account { get; }
更改为:
public DbSet<Account> Account { get; set;}
但是,直到我尝试将linq查询与上面提到的Where()
和Select()
一起使用时,它才显示异常。
我试图将DbSet
设置为只读。我会继续尝试...
答案 15 :(得分:0)
如果您尝试对null集合中的值进行计数,则会返回此异常。
例如,当Errors不为null时,以下内容适用;但是,如果Errors为null,则 Value不能为null。参数名称:source 发生异常。
if (graphQLResponse.Errors.Count() > 0)
可以通过检查null来避免此异常。
if (graphQLResponse.Errors != null)
答案 16 :(得分:0)
我对XUnit也有同样的问题。问题出在我的数据库连接上。检查您的连接字符串是否正确。
答案 17 :(得分:0)
在我的情况下,我错误地将我的两个不同的列定义为如下所示的DbContext配置上的标识,
builder.HasKey(e => e.HistoryId).HasName("HistoryId");
builder.Property(e => e.Id).UseSqlServerIdentityColumn(); //History Id should use identity column in this example
当我像下面这样纠正它时,
builder.HasKey(e => e.HistoryId).HasName("HistoryId");
builder.Property(e => e.HistoryId).UseSqlServerIdentityColumn();
我也摆脱了这个错误。
答案 18 :(得分:0)
在我的情况下,如果保存更改错误bcoz,db可能没有外键,并且关联被添加到EDM表中,这可能是愚蠢的。我在db中添加了外键并重新生成了EDM以进行修复。
我看到的错误如下:
案例1 - &gt;使用DBContext进行EDM时
Message = Value不能为null。
参数名称:source
在System.Linq.Enumerable.Any [TSource](IEnumerable 1 source, Func
2谓词)
案例2 - &gt;使用ObjectContext进行EDM时 Message =无法更新EntitySet'Contact',因为它有一个DefiningQuery,元素中不存在支持当前操作的元素。
(只是想把它丢进去,以防有人帮忙)。