首页 文章

值不能为空 . 参数名称:source

提问于
浏览
93

这可能是我花了好几个小时解决很长时间的最大浪费时间问题 .

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 回答

  • 0

    当我有一个实体属性的无效类型时,我收到此错误 .

    public Type ObjectType {get;set;}
    

    当我删除属性时,错误停止发生 .

  • 1

    在我的情况下,在IIS上配置Web应用程序时弹出问题,当触发任何记录上的更新命令时,会生成此错误 .

    这是App_Data上的权限问题,设置为只读 . 右键单击该文件夹,取消选中“只读”复选框,即可完成 . 顺便说一句,为了测试目的,我使用的是App_Data文件夹中的localdb数据库 .

  • 1

    我有一段时间回来了,答案不一定是你所期待的 . 当您的连接字符串错误时,通常会出现此错误消息 .

    猜测一下,你需要这样的东西:

    <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配置,那么我们可以检查 .

  • 34

    DbContext内部的某个值是 IEnumerable ,并使用 Any() (或 Where()Select() 或任何其他LINQ方法)进行查询,但此值为 null .

    找出是否将查询放在一起(在示例代码之外的某处)使用LINQ方法,或者使用 IEnumerable 作为NULL参数 .

  • 0

    我的理由与其他人不同,所以我想我会把它发布给其他可能有这个问题的人 .

    我在一个DbSet实例上调用Count,其中包含一个null过滤器,即

    dbSet.Count(null);
    

    我发现在这里传递null导致错误,所以我现在调用无参数方法,如果过滤器为null:

    if (filter == null)
     {
         return dbSet.Count();
     }
     else
     {
         return dbSet.Count(filter);
     }
    

    这为我排序了问题 . 对于DbSet上的任何其他方法,这可能是一个问题 .

  • 0

    就像一个FYI,有人可能会发现它很有用 . 我差不多2天追逐我的尾巴这个错误并且总是在考虑可能是问题的类,最后我发现它非常愚蠢的问题,它是在mypage.ascx中我的标记(HTML)代码 . 问题是我有一个 <asp:EntityDataSource> ,这有一个包含属性,我在这里列出了一些其他表,错误的是最近从数据库中删除了一个表,我从未注意到它与其他实体返回null . 我刚从包含列表中删除了愚蠢的表格,我很高兴 . 希望这可以帮助别人 .

  • 3

    解决了以下解决方案

    1)右键单击edmx文件,选择Open with,XML editor

    2)在edmx:StorageModels元素中找到实体

    3)完全删除DefiningQuery

    4)重命名商店:Schema =“dbo”到Schema =“dbo”(如果存在)

    5)删除商店:名称属性

  • 0

    如果其他人在这里遇到我的DB First Entity Framework设置问题 .

    简而言之,我需要重载Entities构造函数以接受连接字符串,原因是能够使用Asp.Net Core依赖注入容器从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中描述的运行时错误 .

  • 133

    确保将存储库注入服务的构造函数中 . 这解决了我 . :: smacks额头::

  • 0

    它可能像我的情况一样愚蠢,其中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,并且元素中不存在支持当前操作的元素 .

    (只是想把它扔到那里,以防它帮助某人) .

  • 0

    在MVC中,View屏幕是调用方法,它在Controller或Repository.cs中,并为CSHTML中的任何控件分配返回值,但该方法实际上没有在.cs / controller中实现,那么CSHTML将抛出NULL参数异常

  • 1

    我的错误是在尝试调用Razor视图中的SubChildEntities时忘记将.ThenInclude(s => s.SubChildEntities)添加到父.Include(c => .S.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对象 . 它确实成功编译和执行 .

  • 10

    我知道距离问题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使用 .

相关问题