EFcore 报错:Value cannot be null. Parameter name: frameworkName

Posted muzizongheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EFcore 报错:Value cannot be null. Parameter name: frameworkName相关的知识,希望对你有一定的参考价值。

今天在EF core 2.2 中使用code first 保存数据时遇到一个错误:

Value cannot be null.

Parameter name: frameworkName

   at Microsoft.EntityFrameworkCore.Metadata.Internal.ClrCollectionAccessorFactory.Create(INavigation navigation)

   at Microsoft.EntityFrameworkCore.Metadata.Internal.Navigation.<>c.<get_CollectionAccessor>b__21_0(Navigation n)

   at Microsoft.EntityFrameworkCore.Internal.NonCapturingLazyInitializer.EnsureInitialized[TParam,TValue](TValue& target, TParam param, Func`2 valueFactory)

   at Microsoft.EntityFrameworkCore.Metadata.Internal.Navigation.get_CollectionAccessor()

   at Microsoft.EntityFrameworkCore.NavigationExtensions.GetCollectionAccessor(INavigation navigation)

   at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.CustomShaperCompilingExpressionVisitor.VisitExtension(Expression extensionExpression)

   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)

 

看到错误说时和collection有关, 

 

代码中的是这样定义的

private readonly List<SharedDataItem> _sharedData = new List<SharedDataItem>();

        public IEnumerable<SharedDataItem> SharedData => _sharedData.AsReadOnly();

当时第一反应是一对多的关系 映射有问题, 然后检查了entityconfiguration类以及add-migration / update-database步骤是否正常, 发现一切ok, 最终的数据库表结构也没问题。

 

后来又想了下,是不是因为我私有字段的缘故, 然后在entityconfiguration类中添加了下面的代码       

builder.HasMany(p => p.SharedData).WithOne().HasForeignKey("WorkOrderId");

            var navigation = builder.Metadata.FindNavigation(nameof(WorkOrder.SharedData));

            navigation.SetPropertyAccessMode(PropertyAccessMode.Field);

结果还是有问题, 允悲。。。。

 

 

后来看到一个github的帖子: https://github.com/dotnet/efcore/issues/19535 才找到了原因:

是我的私有字段定义readonly了。 删除即可。

最终的定义是:

private readonly List<SharedDataItem> _sharedData = new List<SharedDataItem>();

        public IEnumerable<SharedDataItem> SharedData => _sharedData.AsReadOnly();

再次运行各种save操作都ok了。 因为这个还导致了我的电脑各种蓝屏。

以上是关于EFcore 报错:Value cannot be null. Parameter name: frameworkName的主要内容,如果未能解决你的问题,请参考以下文章

eclipse 报错Syatem cannot be resolved

typeError:The value of a feed cannot be a tf.Tensor object.Acceptable feed values include Python sca

报错:BASE64Decoder cannot be resolved to a type

用Struts2框架报错:The Struts dispatcher cannot be found

项目导入之后报错:The import javax.servlet cannot be resolved

解决报错:The import javax.servlet.annotation cannot be resolved