Entity framework EF Core nullable一对一关系不允许重复NULL

Entity framework EF Core nullable一对一关系不允许重复NULL,entity-framework,foreign-keys,.net-core,Entity Framework,Foreign Keys,.net Core,在EF Core中,我有两个相互之间有1-1关系的模型 多层播放: public class MultiPlayerPlay { public long Id { get; set; } ... // Relations ... public long? CallerPlayerPlayId { get; set; } public virtual UserMutantPlay CallerPlayerPlay { get; set; }

在EF Core中,我有两个相互之间有1-1关系的模型

多层播放:

public class MultiPlayerPlay
{
    public long Id { get; set; }
    ...

    // Relations
    ...
    public long? CallerPlayerPlayId { get; set; }
    public virtual UserMutantPlay CallerPlayerPlay { get; set; }
    public long? CalledPlayerPlayId { get; set; }
    public virtual UserMutantPlay CalledPlayerPlay { get; set; }
    ...
}
和UserMutantPlay:

public class UserMutantPlay
{
    public long Id { get; set; }
    ...

    // Relations
    ...
    public long? MultiPlayerPlayAsCallerId { get; set; }
    public virtual MultiPlayerPlay MultiPlayerPlayAsCaller { get; set; }
    public long? MultiPlayerPlayAsCalledId { get; set; }
    public virtual MultiPlayerPlay MultiPlayerPlayAsCalled { get; set; }
}
以及两者之间的关系:

        modelBuilder.Entity<MultiPlayerPlay>()
            .HasOne(mpp => mpp.CallerPlayerPlay)
            .WithOne(p => p.MultiPlayerPlayAsCaller)
            .HasForeignKey<MultiPlayerPlay>(mpp => mpp.CallerPlayerPlayId)
            //.HasForeignKey<UserMutantPlay>(ump => ump.MultiPlayerPlayAsCallerId)
            .IsRequired(false)
            .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);

        modelBuilder.Entity<MultiPlayerPlay>()
            .HasOne(mpp => mpp.CalledPlayerPlay)
            .WithOne(p => p.MultiPlayerPlayAsCalled)
            .HasForeignKey<MultiPlayerPlay>(mpp => mpp.CalledPlayerPlayId)
            //.HasForeignKey<UserMutantPlay>(ump => ump.MultiPlayerPlayAsCalledId)
            .IsRequired(false)
            .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
第一次很好。接下来,它提到FK关系中不能有多个空值。错误是:

{System.Data.SqlClient.SqlException:无法在对象“dbo.MultiPlayerPlays”中插入具有唯一索引“IX_MultiPlayerPlays_CalledPlayerPlayId”的重复键行。重复的键值为()。 声明已终止。 位于System.Data.SqlClient.SqlConnection.OneError(SqlException异常、布尔断开连接、Action
1 wrapCloseInAction)
位于System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject StateObjectStateObj、布尔调用方连接锁、布尔异步关闭)
位于System.Data.SqlClient.TdsParser.TryRun(RunBehavior RunBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj、Boolean和dataReady)
位于System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()处
在System.Data.SqlClient.SqlDataReader.get_MetaData()处
位于System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior、String ResetOptions String)
位于System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior RunBehavior、Boolean returnStream、Boolean async、Int32超时、任务和任务、Boolean asyncWrite、SqlDataReader ds)
位于System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior)
在Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection连接,String executeMethod,iRelationalOnlyDictionary
2参数值,布尔闭合连接) 位于Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection连接,IReadOnlyDictionary`2参数值) 在Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection) 客户连接ID:7c7adc7b-0172-4134-89c9-6b5f050ac860 错误号:2601,状态:1,类:14}

    MultiPlayerPlay multiPlayerPlay = new MultiPlayerPlay()
        {
            CallerPlayerId = inviterUser.Id,
            CalledPlayerId = invitedUser.Id,
            StillRunning = true,
            StillRunningForCaller = true,
            StillRunningForCalled = true,
            MutantId = GetRandomMutantIdByLevelId(dbContext, inviterUser.Id, invitedUser.Id),
        };

        dbContext.MultiPlayerPlays.Add(multiPlayerPlay);
        dbContext.SaveChanges();