use*_*261 5 c# mapping entity-framework exception
我们首先使用EF代码和EF 6.1.3以及SimpleInjector 3.1.0,我们随机获得类似的异常:
"位置"上的"IsDeleted"属性无法设置为"System.Int32"值.必须将此属性设置为类型为"System.Boolean"的非null值.
System.Data.Entity.Cart.Eternal中的System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader,Int32 ordinal)
处于System.Data.Materialization.Shaper.GetPropertyValueWithErrorHandling [TProperty] System.Data.Entity.Core上的System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 中的
lambda_method(Closure,Shaper)
处的(Int32 ordinal,String propertyName,String typeName)
.
System.Linq.Enumerable.FirstOrDefault [TSource]中的Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()(IEnumerable`1 source)
在这种情况下,Location表的IsDeleted列是bit/not null.而Location实体上的Property绝对是一个不可为空的布尔值.我已经检查了我们的git存储库中的实体的整个历史记录,这个属性从来都不是布尔值,并且服务器上的当前dll是正确的,所以它不是问题是由错误的代码引起的/ DLL.
真正奇怪的是,大部分时间我们的网站工作得很好,我希望每次都会发生异常.更奇怪的是,我们已经看到同样类型的错误发生在其他3个实体上(也似乎是随机的).在每种情况下,它都是不同的属性和数据类型.例如:
'SysGroup'上的'Description'属性无法设置为'System.Boolean'值.您必须将此属性设置为类型为"System.Int32"的非null值.
'SysInfo'上的'SysGroupId'属性无法设置为'System.String'值.您必须将此属性设置为类型为"System.Int32"的非null值.
'BaseEntity'上的'Id'属性无法设置为'System.Guid'值.您必须将此属性设置为类型为"System.Int32"的非null值.
关于最后一个......我们从BaseEntity继承的每个实体都有一个名为'Id'的非可空int属性.我们也不在任何地方使用任何Guid.因此,如果BaseEntity确实使用了ID属性的Guid,那么每个查询都会失败.最后一个异常发生在代码导航属性时,如下所示:
var desc = SysInfoInstance.SysGroup.Description;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Location类是基本的:
public class Location :
BaseEntity
{
...
public virtual bool IsDeleted { get; set; }
}
public abstract class BaseEntity
{
public virtual int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
小智 0
我不确定为什么您的 IsDeleted 属性被标记为虚拟。
没有其他理由将财产设为虚拟。导航属性被标记为虚拟以进行延迟加载,标量属性被标记为虚拟以进行更改跟踪。
IsDeleted 不需要 virtual 关键字
您可以按如下方式创建另一个属性,而不将其映射到您的数据库。但这应该是没有必要的。
public int Deleted { get; set; }
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public bool IsDeleted
{
get { return Deleted == 1; }
set { Deleted = value ? 1 : 0; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |