首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EF随机看到错误的属性类型

EF随机看到错误的属性类型
EN

Stack Overflow用户
提问于 2016-01-26 09:57:25
回答 2查看 1.5K关注 0票数 6

我们首先在EF 6.1.3和SimpleInjector 3.1.0中使用EF代码,然后随机获得类似于以下内容的异常:

“Location”上的“IsDeleted”属性不能设置为“System.Int32”值。必须将此属性设置为‘System.boole’类型的非空值。 (在System.Data.Entity.Core.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader1.GetValue(DbDataReader reader, Int32 ordinal) at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.GetPropertyValueWithErrorHandling[TProperty](Int32 ordinal, String propertyName, String typeName) at lambda\_method(Closure , Shaper ) at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator1.ReadNextElement(Shaper shaper) (在System.Data.Entity.Core.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1源)

在这种情况下,Location表的IsDeleted列是位/ null。而且位置实体上的属性肯定是不可空的布尔值。我已经检查了git存储库中实体的整个历史,而这个属性除了布尔值之外,从来都不是其他任何东西,服务器上的当前dll是正确的,所以这个问题并不是由错误的代码/dll引起的。

真正奇怪的是,大多数情况下,我们的网站运作良好,我希望这一例外会发生每次。更奇怪的是,我们已经看到类似的错误发生在其他3个实体上(看起来也是随机的)。在每种情况下,它都是不同的属性和数据类型。例如:

'SysGroup‘的'Description’属性不能设置为'System.Boolean‘值。必须将此属性设置为‘System.Int 32’类型的非空值。 “SysGroupId”属性在“SysInfo”上不能设置为“System.String”值。必须将此属性设置为‘System.Int 32’类型的非空值。 “BaseEntity”上的“Id”属性不能设置为“System.Guid”值。必须将此属性设置为‘System.Int 32’类型的非空值。

关于最后一个..。我们从BaseEntity继承的每个实体都有一个名为'Id‘的不可空int属性。我们也不使用任何地方的盖德。因此,如果BaseEntity确实对Id属性使用了Guid,那么所有的查询都会失败。最后一个异常发生在代码导航属性时,如下所示:

代码语言:javascript
运行
复制
var desc = SysInfoInstance.SysGroup.Description;

有什么想法吗?

Location类是明确的:

代码语言:javascript
运行
复制
public class Location : 
    BaseEntity
{
    ...
    public virtual bool IsDeleted { get; set; }
}
public abstract class BaseEntity
{
    public virtual int Id { get; set; }
}
EN

回答 2

Stack Overflow用户

发布于 2016-01-26 11:28:13

我不知道为什么您的IsDeleted属性被标记为虚拟的。

没有其他理由使属性变为虚拟的。对于延迟加载,导航属性标记为虚拟属性,对于更改跟踪,标量属性标记为虚拟属性。

IsDeleted不需要虚拟关键字

您可以创建另一个属性,如下所示,而不是将其映射到db。但这不应该是必要的

代码语言:javascript
运行
复制
public int Deleted { get; set; }

[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public bool IsDeleted
{
    get { return Deleted == 1; }
    set { Deleted = value ? 1 : 0; }
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-25 11:29:05

也有同样的问题。看起来像是与存储过程连接的某种类型的EF错误。你在你的应用程序中使用它们吗?

在我的例子中,问题在于,我已经更改了DB中表的结构(将列添加到中间),而存储过程(从该DB获取数据)已经添加到EF中。之后,每次尝试调用存储过程时,都会出现相同的异常。这个例外看起来真的很奇怪,我浪费了很多时间来解决问题。

解决方案是将新列移到表的末尾。它修复了一切。看起来EF`s的存储过程以某种方式保存了数据的结构,当表结构发生变化时,它会抛出非常奇怪和错误的异常。

另一种解决方案是从EF中删除存储过程并将其放回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35011086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档