首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >EF AsNoTracking导致错误。类型为“System.DateTime”的表达式不能用于对类型“System.Nullable`1[System.DateTime]”的赋值

EF AsNoTracking导致错误。类型为“System.DateTime”的表达式不能用于对类型“System.Nullable`1[System.DateTime]”的赋值
EN

Stack Overflow用户
提问于 2018-06-10 00:48:59
回答 1查看 419关注 0票数 3

今天我决定把我的一个老项目从Asp.net核心1.1升级到2.1,一切都很顺利,直到我尝试从数据库中检索一个本地事件列表。我使用的是.AsNotracking,因为除了排序/过滤之外,我不需要对对象进行任何更改。

这是错误:

类型为“System.DateTime”的

表达式不能用于对类型“System.Nullable`1System.DateTime”的赋值

这是我遇到问题的代码:

    var today = DateTime.Now;

    var events = await _context.LocalEvent.Where
    (x => x.ReoccurUntil > today || x.EventEnd > today).AsNoTracking().ToListAsync();

这是LocalEvent模型:

public class LocalEvent
{
    [NotMapped]
    private DateTime? dateCreated;

    [Key]
    public Guid Id { get; set; }

    [MaxLength(200)]
    [Display(Name = "Event Location")]
    [DataType(DataType.MultilineText)]
    public string Location { get; set; }

    [Display(Name = "Added By")]
    public string Author { get; set; }

    [Display(Name = "Contact")]
    public string EventContact { get; set; }

    [Display(Name = "Event Name")]
    public string EventName { get; set; }

    [DataType(DataType.MultilineText)]
    [Display(Name = "Details")]
    public string EventInfo { get; set; }

    [DataType(DataType.Currency)]
    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    [Display(Name = "Cost")]
    public Decimal? EventCost { get; set; }

    //DateStuff
    [Display(Name = "Date Created")]
    public DateTime DateCreated
    {
        get { return dateCreated ?? DateTime.Now; }
        set { dateCreated = value; }
    }

    [Display(Name = "Event Start")]
    public DateTime EventStart { get; set; }


    [DateGreaterThan("EventStart")]
    [Display(Name = "Event End")]
    public DateTime EventEnd { get; set; }

    public DateTime ReoccurUntil { get; set; }

    [Display(Name = "Reoccurrence Type")]
    public TypeOfOccurrence OccurrenceType { get; set; }

    [Display(Name = "Which Occurence of Weekday")]
    public Nth NthReOccurence { get; set; }

    [Display(Name = "Weekday for Reoccurence")]
    public DayOfWeek ReoccurrenceDay { get; set; }

    [Display(Name = "Occurrence Rate")]
    public OccurrenceRate Occurrence { get; set; }
    public bool DoesReoccur { get; set; }

    [DataType(DataType.ImageUrl)]
    public string Image { get; set; }

    public string ImageDeletePath { get; set; }
    public string Slug { get; set; }
}

现在,我只是简单地删除了AsNoTracking,让它恢复工作。我做错了什么吗?

这个错误真的很奇怪,因为它提到了日期,所以需要一段时间才能追溯到AsNoTracking,我删除了所有与日期有关的内容,最初只是删除了可以为空的日期,然后我意识到对管理员列表(一个完整的跟踪列表)的类似调用可以与唯一的区别是AsNoTracking一起工作,这就是我(在测试之后)决定在这里询问的时候。

我的想法是,如果我不打算修改、删除等,我应该避免跟踪以提高性能!?

希望有人能在这个问题上提供一点启发!提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 01:16:08

它是由v2.1中引入的EF核心错误引起的。

#12215: Exception when loading entity containing a primitive property with matching System.Nullable backing field报告和跟踪。

未提供解决方法,已计划在v2.2中修复。

我可以建议的是强制EF使用属性而不是支持字段:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // ...

    modelBuilder.Entity<LocalEvent>()
        .Property(e => e.DateCreated)
        .UsePropertyAccessMode(PropertyAccessMode.Property);

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

https://stackoverflow.com/questions/50776505

复制
相关文章

相似问题

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