C# EF Core |需要使用导航属性更新一个属性,而不是另一个(模块)

C# EF Core |需要使用导航属性更新一个属性,而不是另一个(模块),c#,entity-framework-core,ef-core-2.1,C#,Entity Framework Core,Ef Core 2.1,我有一个文件表,在其中我将FK添加到模块表中,以添加它来自哪个模块 当我们将记录创建到filesystemems中时,我们还需要更新filesystememsdatas 我们使用以下代码执行此操作: public async Task<int> CreateFileSystemItem(FileSystemItemCreateDTO fileSystemItem) { if (fileSystemItem == null)

我有一个文件表,在其中我将FK添加到模块表中,以添加它来自哪个模块

当我们将记录创建到filesystemems中时,我们还需要更新filesystememsdatas

我们使用以下代码执行此操作:

        public async Task<int> CreateFileSystemItem(FileSystemItemCreateDTO fileSystemItem)
        {
            if (fileSystemItem == null)
            {
                throw new ArgumentNullException(nameof(fileSystemItem));
            }

            var fileSystemItemToCreate = new FileSystemItems()
            {
                FileName = fileSystemItem.FileName,
                FileType = fileSystemItem.FileType,
                IsFolder = fileSystemItem.IsFolder,
                LastWriteTime = fileSystemItem.LastWriteTime,
                ParentId = fileSystemItem.ParentId,
                FileMetadata = fileSystemItem.FileMetadata,
                ModuleId = fileSystemItem.ModuleId,
            };

            fileSystemItemToCreate.FileSystemItemData.FileData = fileSystemItem.FileData;

            BIContext.FileSystemItems.Add(fileSystemItemToCreate);

            await SaveChangesAsync().ConfigureAwait(false);

            return fileSystemItemToCreate.FileId;
        }
公共异步任务CreateFileSystemItem(FileSystemEmCreatedToFileSystemItem)
{
if(filesystemem==null)
{
抛出新ArgumentNullException(nameof(fileSystemItem));
}
var filesystememtocreate=new filesystememitems()
{
FileName=filesystemem.FileName,
FileType=filesystememitem.FileType,
IsFolder=filesystememitem.IsFolder,
LastWriteTime=fileSystemItem.LastWriteTime,
ParentId=filesystememitem.ParentId,
FileMetadata=fileSystemItem.FileMetadata,
ModuleId=filesystememitem.ModuleId,
};
FileSystemToCreate.FileSystemEmData.FileData=FileSystemEmItem.FileData;
添加(fileSystemToCreate);
等待SaveChangesSync()。配置等待(false);
返回filesystemtocreate.FileId;
}
然后我看到了这个错误:

Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'DisplayName', table 'Core.Modules'; column does not allow nulls. INSERT fails.
The statement has been terminated.
   at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__180_0(Task`1 result)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时出错。有关详细信息,请参见内部异常。-->System.Data.SqlClient.SqlException:无法将值NULL插入到“DisplayName”列、表“Core.Modules”中;列不允许空值。插入失败。
声明已终止。
在System.Data.SqlClient.SqlCommand.c.b\u 180\u 0(任务'1结果)
位于System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
在System.Threading.Tasks.Task.Execute()中
---来自引发异常的上一个位置的堆栈结束跟踪---
我知道我是通过我的导航属性添加到FileSystemItemData中的,但是如何确保我不更新.Modules导航属性,因为在这种情况下我不需要更新

filesystemems.cs

/// <summary>
    /// File System Item
    /// </summary>
    public partial class FileSystemItems
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FileSystemItems"/> class.
        /// </summary>
        public FileSystemItems()
        {
            ItemChildren = new HashSet<FileSystemItems>();
            FileSystemItemData = new FileSystemItemDatas();
            Module = new Modules();
        }

        /// <summary>
        /// Gets or sets the file identifier.
        /// </summary>
        /// <value>
        /// The file identifier.
        /// </value>
        public int FileId { get; set; }

        /// <summary>
        /// Gets or sets the parent identifier.
        /// </summary>
        /// <value>
        /// The parent identifier.
        /// </value>
        public int? ParentId { get; set; }

        /// <summary>
        /// Gets or sets the name of the file.
        /// </summary>
        /// <value>
        /// The name of the file.
        /// </value>
        public string FileName { get; set; }

        /// <summary>
        /// Gets or sets the type of the file.
        /// </summary>
        /// <value>
        /// The type of the file.
        /// </value>
        public string FileType { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is folder.
        /// </summary>
        /// <value>
        ///   <c>true</c> if this instance is folder; otherwise, <c>false</c>.
        /// </value>
        public bool IsFolder { get; set; }

        /// <summary>
        /// Gets or sets the last write time.
        /// </summary>
        /// <value>
        /// The last write time.
        /// </value>
        public DateTime LastWriteTime { get; set; }

        /// <summary>
        /// Gets or sets the file system item data identifier.
        /// </summary>
        /// <value>
        /// The file system item data identifier.
        /// </value>
        public int? FileSystemItemDataId { get; set; }

        /// <summary>
        /// Gets or sets the module identifier.
        /// </summary>
        /// <value>
        /// The module identifier.
        /// </value>
        public int? ModuleId { get; set; }

        /// <summary>
        /// Gets or sets the file metadata.
        /// </summary>
        /// <value>
        /// The file metadata.
        /// </value>
        public string FileMetadata { get; set; }

        /// <summary>
        /// Gets or sets the file system item data.
        /// </summary>
        /// <value>
        /// The file system item data.
        /// </value>
        public FileSystemItemDatas FileSystemItemData { get; set; }

        /// <summary>
        /// Gets or sets the item children.
        /// </summary>
        /// <value>
        /// The item children.
        /// </value>
        public virtual ICollection<FileSystemItems> ItemChildren { get; set; }

        /// <summary>
        /// Gets or sets the parent item.
        /// </summary>
        /// <value>
        /// The parent item.
        /// </value>
        public virtual FileSystemItems ParentItem { get; set; }

        /// <summary>
        /// Gets or sets the module.
        /// </summary>
        /// <value>
        /// The module.
        /// </value>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1716:Identifiers should not match keywords", Justification = "It's a Module")]
        public virtual Modules Module { get; set; }
    }
//
///文件系统项
/// 
公共部分类文件系统
{
/// 
///初始化类的新实例。
/// 
公共文件系统emitems()
{
ItemChildren=newhashset();
filesystememdata=newfilesystememdatas();
模块=新模块();
}
/// 
///获取或设置文件标识符。
/// 
/// 
///文件标识符。
/// 
public int FileId{get;set;}
/// 
///获取或设置父标识符。
/// 
/// 
///父标识符。
/// 
public int?ParentId{get;set;}
/// 
///获取或设置文件的名称。
/// 
/// 
///文件名。
/// 
公共字符串文件名{get;set;}
/// 
///获取或设置文件的类型。
/// 
/// 
///文件的类型。
/// 
公共字符串文件类型{get;set;}
/// 
///获取或设置一个值,该值指示此实例是否为文件夹。
/// 
/// 
///如果此实例是文件夹,则为true;否则为false。
/// 
公用文件夹{get;set;}
/// 
///获取或设置上次写入时间。
/// 
/// 
///最后一次写入时间。
/// 
公共日期时间LastWriteTime{get;set;}
/// 
///获取或设置文件系统项数据标识符。
/// 
/// 
///文件系统项数据标识符。
/// 
公共int?FileSystemDataId{get;set;}
/// 
///获取或设置模块标识符。
/// 
/// 
///模块标识符。
/// 
公共int?ModuleId{get;set;}
/// 
///获取或设置文件元数据。
/// 
/// 
///文件元数据。
/// 
公共字符串FileMetadata{get;set;}
/// 
///获取或设置文件系统项数据。
/// 
/// 
///文件系统项数据。
/// 
公共filesystemdatas filesystememdata{get;set;}
/// 
///获取或设置项的子项。
/// 
/// 
///该项目包含多个子项。
/// 
公共虚拟ICollection ItemChildren{get;set;}
/// 
///获取或设置父项。
/// 
/// 
///父项。
/// 
公共虚拟文件系统父项{get;set;}
/// 
///获取或设置模块。
/// 
/// 
///模块。
/// 
[System.Diagnostics.CodeAnalysis.SuppressMessage(“命名”,“CA1716:标识符不应与关键字匹配”,Justification=“这是一个模块”)]
公共虚拟模块模块{get;set;}
}
模块.cs

    /// <summary>
    /// Module
    /// </summary>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1716:Identifiers should not match keywords", Justification = "It's a Module")]
    [Table("Modules", Schema = "Core")]
    public partial class Modules
    {
        /// <summary>
        /// Gets or sets the module identifier.
        /// </summary>
        /// <value>
        /// The module identifier.
        /// </value>
        public int ModuleId { get; set; }

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>
        /// The name.
        /// </value>
        public string Name { get; set; }

        /// <summary>
        /// Gets or sets the display name.
        /// </summary>
        /// <value>
        /// The name.
        /// </value>
        public string DisplayName { get; set; }

        /// <summary>
        /// Gets or sets the extension identifier.
        /// </summary>
        /// <value>
        /// The extension identifier.
        /// </value>
        public int ExtensionId { get; set; }

        /// <summary>
        /// Gets or sets the file system items.
        /// </summary>
        /// <value>
        /// The file system items.
        /// </value>
        public virtual ICollection<FileSystemItems> FileSystemItems { get; set; }
    }
//
///模块
/// 
[System.Diagnostics.CodeAnalysis.SuppressMessage(“命名”,“CA1716:标识符不应与关键字匹配”,Justification=“这是一个模块”)]
[表(“模块”,Schema=“核心”)]
公共部分类模块
{
/// 
///获取或设置模块标识符。
/// 
/// 
///模块标识符。
/// 
public int ModuleId{get;set;}
/// 
///获取或设置名称。
/// 
/// 
///名字。
/// 
公共字符串名称{get;set;}
/// 
///获取或设置显示名称。
/// 
/// 
///名字。
/// 
公共字符串DisplayName{get;set;}
///
    /// <summary>
    /// File system item data
    /// </summary>
    public partial class FileSystemItemDatas
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="FileSystemItemDatas"/> class.
        /// </summary>
        public FileSystemItemDatas()
        {
            FileSystemItems = new HashSet<FileSystemItems>();
        }

        /// <summary>
        /// Gets or sets the file data identifier.
        /// </summary>
        /// <value>
        /// The file data identifier.
        /// </value>
        public int FileDataId { get; set; }

#pragma warning disable CA1819 // Properties should not return arrays
                              /// <summary>
                              /// Gets or sets the file data.
                              /// </summary>
                              /// <value>
                              /// The file data.
                              /// </value>
        public byte[] FileData { get; set; }
#pragma warning restore CA1819 // Properties should not return arrays

        /// <summary>
        /// Gets or sets the file system items.
        /// </summary>
        /// <value>
        /// The file system items.
        /// </value>
        public ICollection<FileSystemItems> FileSystemItems { get; set; }
    }
            modelBuilder.Entity<FileSystemItemDatas>(entity =>
            {
                entity.HasKey(e => e.FileDataId);
            });

            modelBuilder.Entity<FileSystemItems>(entity =>
            {
                entity.HasKey(e => e.FileId);

                entity.Property(e => e.FileName)
                    .IsRequired()
                    .HasMaxLength(255)
                    .IsUnicode(false);

                entity.Property(e => e.FileType)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.Property(e => e.FileMetadata).IsRequired().HasColumnType("nvarchar(max)").HasDefaultValue("[{}]");

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

                entity.HasOne(d => d.FileSystemItemData)
                   .WithMany(p => p.FileSystemItems)
                   .HasForeignKey(d => d.FileSystemItemDataId)
                   .HasConstraintName("FK_FileSystemItems_FileSystemItemDatas");

                entity.HasOne(d => d.Module)
                    .WithMany(p => p.FileSystemItems)
                    .HasForeignKey(d => d.ModuleId)
                    .HasConstraintName("FK_FileSystemItems_ModuleId");

                entity.HasOne(d => d.ParentItem)
                    .WithMany(p => p.ItemChildren)
                    .HasForeignKey(d => d.ParentId)
                    .HasConstraintName("FK_FileSystemItems_FileSystemItems");

                entity.HasOne(d => d.ParentItem)
                    .WithMany(p => p.ItemChildren)
                    .HasForeignKey(d => d.ParentId)
                    .HasConstraintName("FK_FileSystemItems_FileSystemItems");
            });

            modelBuilder.Entity<Modules>(entity =>
            {
                entity.HasKey(e => e.ModuleId);

                entity.Property(e => e.Name)
                    .IsRequired()
                    .HasMaxLength(200)
                    .IsUnicode(false);

                entity.Property(e => e.DisplayName)
                    .IsRequired()
                    .HasMaxLength(200)
                    .IsUnicode(false);
            });
        /// <summary>
        /// Initializes a new instance of the <see cref="FileSystemItems"/> class.
        /// </summary>
        public FileSystemItems()
        {
            ItemChildren = new HashSet<FileSystemItems>();
        }