Entity framework core EF core,nvarchar的null映射不正确

Entity framework core EF core,nvarchar的null映射不正确,entity-framework-core,Entity Framework Core,在我的ModelBuilder中,我有以下映射: entity.Property(e => e.topic) .HasColumnType("nvarchar(50)") .HasColumnName("topic"); 对于此字段: public string topic { get; set; } 但是,当我查询包含列“topic”的表时(对于每个模型中nvarchar类型的所有列都是相同的),DB值null被映射为字符串“null”,而不是值null 这是

在我的ModelBuilder中,我有以下映射:

entity.Property(e => e.topic)
      .HasColumnType("nvarchar(50)")
      .HasColumnName("topic");
对于此字段:

public string topic { get; set; }
但是,当我查询包含列“topic”的表时(对于每个模型中nvarchar类型的所有列都是相同的),DB值null被映射为字符串“null”,而不是值null

这是EF core中的一个bug吗?还是我错误地映射了列


更新

以下是实际代码:

  modelBuilder.Entity<Bait_dom>(entity =>
  {
    entity.HasKey(e => e.blid)
        .HasName("PK_seo_lb_dom");

    entity.ToTable("bait_dom");

    entity.Property(e => e.blid)
        .HasColumnName("blid");

    entity.Property(e => e.customerid)
      .IsRequired()
      .HasColumnName("customerid")
      .HasMaxLength(50);

    entity.Property(e => e.url)
            .IsRequired()
            .HasColumnName("url")
            .HasMaxLength(100);

    entity.Property(e => e.mozda)
      .HasColumnName("mozda");

    entity.Property(e => e.kwpos)
      .HasColumnName("kwpos");

    entity.Property(e => e.moztrust)
      .HasColumnName("moztrust");

    entity.Property(e => e.ahrefdr)
      .HasColumnName("ahrefdr");

    entity.Property(e => e.topic)
      .HasColumnType("nvarchar(50)")
      .HasColumnName("topic");

    entity.Property(e => e.status)
      .HasColumnName("status")
      .HasMaxLength(10);

    entity.Property(e => e.createdon)
        .IsRequired()
        .HasColumnName("createdon");

    entity.Property(e => e.updatedon)
        .HasColumnName("updatedon");
  });

public virtual DbSet<Bait_dom> Bait_dom { get; set; }

public class Bait_dom
{
    public int blid { get; set; }
    public string customerid { get; set; }
    public string url { get; set; }
    public decimal? mozda { get; set; }
    public int? kwpos { get; set; }
    public decimal? moztrust { get; set; }
    public decimal? ahrefdr { get; set; }
    public string topic { get; set; }
    public string status { get; set; }
    public DateTime? askedon { get; set; }
    public DateTime createdon { get; set; }
    public DateTime? updatedon { get; set; }
}
最后是一个问题:

  List<SiteData> ret = (from d in _db.Bait_dom
           join li in _db.Bait_links on new { d.url, d.customerid } equals new { li.url, li.customerid } into lin
           from l in lin.DefaultIfEmpty()
           where d.customerid == _user.guid
           group new { d, l } by d into dl
           select new SiteData
           {
             dom = dl.Key,
             links = dl.Where(l => l.l != null).Select(l => l.l).ToList(),
             hm = dl.Where(l => l.l != null).Count(l => l.l.status != "planned"),
             hmp = dl.Where(l => l.l != null).Count(l => l.l.status == "planned"),

             asked = dl.Key.askedon,
             lastLink = dl.Where(l => l.l != null && l.l.status != "planned").Max(l => l.l.publishedon),
             nextLink = dl.Where(l => l.l != null && l.l.status == "planned").Min(l => l.l.publishedon)

           })
          .ToList();
List ret=(来自_db.Bait\u dom中的d)
在新的{d.url,d.customerid}上的{u db.Bait_链接中加入li,等于在lin中加入新的{li.url,li.customerid}
来自林中的l.DefaultIfEmpty()
其中d.customerid==\u user.guid
将新的{d,l}按d分组到dl中
选择新站点数据
{
dom=dl.Key,
links=dl.Where(l=>l.l!=null).Select(l=>l.l).ToList(),
hm=dl.Where(l=>l.l!=null).Count(l=>l.l.status!=“计划”),
hmp=dl.Where(l=>l.l!=null).Count(l=>l.l.status==“计划”),
ask=dl.Key.askedon,
lastLink=dl.Where(l=>l.l!=null&&l.l.status!=“计划”).Max(l=>l.l.publishedon),
nextLink=dl.Where(l=>l.l!=null&&l.l.status==“计划”).Min(l=>l.l.publishedon)
})
.ToList();

如果将映射更改为简单的
modelBuilder.Entity().Property(e=>e.topic).HasMaxLength(50),会发生什么情况(),让约定来处理其余的问题?你能提供一个完整的例子来重现这个问题吗?@MikeBrind尝试过,但没有改变结果。@IvanStoev重现它相当简单,只需创建一个包含nvarchar(50)列的表,将它添加到上下文并查询它。我在询问之前已经尝试过,但无法重现。这行
entity.Property
中的
entity
是什么?我使用了
modelBuilder.Entity()
,对吗?如果将映射更改为简单的
modelBuilder.Entity().Property(e=>e.topic).HasMaxLength(50)(),让约定来处理其余的问题?你能提供一个完整的例子来重现这个问题吗?@MikeBrind尝试过,但没有改变结果。@IvanStoev重现它相当简单,只需创建一个包含nvarchar(50)列的表,将它添加到上下文并查询它。我在询问之前已经尝试过,但无法重现。这行
entity.Property
中的
entity
是什么?我使用了
modelBuilder.Entity()
,对吗?
  List<SiteData> ret = (from d in _db.Bait_dom
           join li in _db.Bait_links on new { d.url, d.customerid } equals new { li.url, li.customerid } into lin
           from l in lin.DefaultIfEmpty()
           where d.customerid == _user.guid
           group new { d, l } by d into dl
           select new SiteData
           {
             dom = dl.Key,
             links = dl.Where(l => l.l != null).Select(l => l.l).ToList(),
             hm = dl.Where(l => l.l != null).Count(l => l.l.status != "planned"),
             hmp = dl.Where(l => l.l != null).Count(l => l.l.status == "planned"),

             asked = dl.Key.askedon,
             lastLink = dl.Where(l => l.l != null && l.l.status != "planned").Max(l => l.l.publishedon),
             nextLink = dl.Where(l => l.l != null && l.l.status == "planned").Min(l => l.l.publishedon)

           })
          .ToList();