EF Core脚手架因一对一关系而失败

问题描述

我已经在sql Server数据库中创建了对象,并在.NET Core 3.1项目中为数据库设置了脚手架。 ModelBuilder引发异常。为了清楚起见,下面仅显示两个表的代码

sql

CREATE TABLE dbo.MirnaObrade
    (
    ID int NOT NULL,Name nvarchar(50) NOT NULL,Type nvarchar(50) NOT NULL,System bit NOT NULL,Interval int NOT NULL,CronSchedule nvarchar(50) NOT NULL
    )  ON [PRIMARY]
GO
CREATE UNIQUE NONCLUSTERED INDEX PK_MirnaObrade ON dbo.MirnaObrade
    (
    ID
    ) WITH( STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


CREATE TABLE dbo.MirnaStatusiObrada
    (
    ID int NOT NULL,Active bit NOT NULL DEFAULT 0,Status int NOT NULL DEFAULT 0,LastExec datetime,NextExec datetime
    )  ON [PRIMARY]
GO
CREATE UNIQUE NONCLUSTERED INDEX PK_MirnaStatusiObrada ON dbo.MirnaStatusiObrada
    (
    ID
    ) WITH( STATISTICS_norECOmpuTE = OFF,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.MirnaStatusiObrada ADD CONSTRAINT
    FK_MirnaStatusiObrada_MirnaObrade FOREIGN KEY
    (
    ID
    ) REFERENCES dbo.MirnaObrade
    (
    ID
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 
GO

-- dbo.MirnaStatusiObrada.ID is foreign key to dbo.MirnaObrade.ID

生成的类

public partial class MirnaObrade
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public bool System { get; set; }
    public int Interval { get; set; }
    public string CronSchedule { get; set; }
}

public partial class MirnaStatusiObrada
{
    public int Id { get; set; }
    public bool Active { get; set; }
    public int Status { get; set; }
    public DateTime? LastExec { get; set; }
    public DateTime? NextExec { get; set; }

    public virtual MirnaObrade IdNavigation { get; set; }
}

模型构建器

//.......
            modelBuilder.Entity<MirnaObrade>(entity =>
            {
                entity.HasNoKey();

                entity.HasIndex(e => e.Id)
                    .HasName("PK_MirnaObrade")
                    .IsUnique();

                entity.Property(e => e.CronSchedule)
                    .Isrequired()
                    .HasMaxLength(50);

                entity.Property(e => e.Id).HasColumnName("ID");

                entity.Property(e => e.Name)
                    .Isrequired()
                    .HasMaxLength(50);

                entity.Property(e => e.Type)
                    .Isrequired()
                    .HasMaxLength(50);
            });

            modelBuilder.Entity<MirnaStatusiObrada>(entity =>
            {
                entity.HasNoKey();

                entity.HasIndex(e => e.Id)
                    .HasName("PK_MirnaStatusiObrada")
                    .IsUnique();

                entity.Property(e => e.Id).HasColumnName("ID");

                entity.Property(e => e.LastExec).HasColumnType("datetime");

                entity.Property(e => e.NextExec).HasColumnType("datetime");

                entity.HasOne(d => d.IdNavigation)
                    .WithOne()
                    .HasPrincipalKey<MirnaObrade>(p => p.Id)
                    .HasForeignKey<MirnaStatusiObrada>(d => d.Id)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_MirnaStatusiObrada_MirnaObrade");
            });
//.......

执行模型构建器(访问表中的数据)时, entity.HasOne 将引发异常 System.NullReferenceException:'对象引用未设置为对象的实例。 '

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)