C# 具有导航属性的实体的ef core插入列表

C# 具有导航属性的实体的ef core插入列表,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我有一个模型 public class Lessee { public long Id { get; set; } public string LesseeName { get; set; } public bool? LogicalDeleteIn { get; set; } } 和另一个具有导航属性的模型 public class RevenueReceived { public long Id

我有一个模型

public class Lessee
    {
        public long Id { get; set; }

        public string LesseeName { get; set; }

        public bool? LogicalDeleteIn { get; set; }
    }
和另一个具有导航属性的模型

  public class RevenueReceived
    {
        public long Id { get; set; }

        ...

        public Lessee Lessee { get; set; }

    }
然后我填充一个承租人列表并插入,这样就可以了

   public List<Lessee> InsertLessees(List<Lessee> lessees)
        {
            using (var ctx = new DataContext())
            {
                ctx.Lessees.AddRange(lessees);
                ctx.SaveChanges();
                return lessees;
            }
        }
公共列表插入承租人(列表承租人)
{
使用(var ctx=new DataContext())
{
ctx.Lesses.AddRange(承租人);
ctx.SaveChanges();
归还承租人;
}
}
然后我创建一个RevenueReceived列表并添加相应的承租人

public List<RevenueReceived> GetRevenueReceived(List<Lessee> lessees)
        {
            List<RevenueReceived> retval = new List<RevenueReceived>();
            using (OleDbConnection con = new OleDbConnection(accessConnectionString))
            using (OleDbCommand Command = new OleDbCommand(" SELECT * from tblRevenueReceived", con))
            {
                con.Open();
                OleDbDataReader DB_Reader = Command.ExecuteReader();
                while (DB_Reader.Read())
                {
                    string lesseeName = DB_Reader.IsDBNull(DB_Reader.GetOrdinal("Company")) ? null : DB_Reader.GetString(DB_Reader.GetOrdinal("Company"));

                        retval.Add(new RevenueReceived
                    {
                        Id = 0,
                        ...
                        Lessee = string.IsNullOrEmpty(lesseeName) ? null :  lessees.FirstOrDefault(x => x.LesseeName == lesseeName)
                    }); 
                }
            }
            return retval;
        }
公共列表GetRevenueReceived(列表承租人)
{
List retval=新列表();
使用(OleDbConnection con=新OleDbConnection(accessConnectionString))
使用(OleDbCommand命令=新的OleDbCommand(“从TBLREVenuerReceived中选择*,con))
{
con.Open();
OleDbDataReader DB_Reader=Command.ExecuteReader();
while(DB_Reader.Read())
{
string lesseeName=DB_Reader.IsDBNull(DB_Reader.GetOrdinal(“公司”))?null:DB_Reader.GetString(DB_Reader.GetOrdinal(“公司”);
retval.Add(新收入已收到)
{
Id=0,
...
承租人=string.IsNullOrEmpty(lesseeName)?null:lessees.FirstOrDefault(x=>x.lesseeName==lesseeName)
}); 
}
}
返回返回;
}
最后,我尝试保存收到的收入列表

public void InsertRevenuesReceived(List<RevenueReceived> revenuesReceived)
        {
            using (var ctx = new DataContext())
            {
                ctx.RevenueReceived.AddRange(revenuesReceived);
                ctx.SaveChanges();
            }
        }
public void InsertRevenuesReceived(列表revenuesReceived)
{
使用(var ctx=new DataContext())
{
ctx.RevenueReceived.AddRange(RevenueReceived);
ctx.SaveChanges();
}
}
我收到下面的错误。我有点困惑,为什么它试图再次插入承租人表。有没有办法只插入主键,而不让它再次插入承租人

Microsoft.EntityFrameworkCore.DbUpdateException HResult=0x80131500
消息=更新条目时出错。看内在 详细信息除外。
Source=Microsoft.EntityFrameworkCore.Relational StackTrace:位于 Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection 连接)在 Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(DbContext _,在Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState 状态,Func3操作,Func
3验证成功)
Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable
1 commandBatches,IRelationalConnection)位于 Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList
1
参赛作品)在
Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList
1 (保存)在 Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(布尔值 可接受的改变(成功) Microsoft.EntityFrameworkCore.DbContext.SaveChanges(布尔值 可接受的改变(成功) Microsoft.EntityFrameworkCore.DbContext.SaveChanges()位于 accessdataimport.DataImportService.InsertRevenuesReceived(列表'1 (收到的)收入 C:\Users\C-bdelling\source\repos\Minerals\accessdataimport\DataImportService.cs:line 在中的accessdataimport.Program.Main(字符串[]args)处为100 C:\Users\C-bdelling\source\repos\Minerals\accessdataimport\Program.cs:line 二十九

内部异常1:SqlException:无法为插入显式值 当identity_INSERT设置为OFF时,表“承租人”中的identity列


这回答了你的问题吗?不,我不这么认为。我相信我的问题是它试图插入到子表(承租人)中,我不希望它这样做。(正如我已经插入承租人)您的
RevenueReceived
模型上是否有承租人的FK财产?e、 g.
public long-seenate_-Id{get;set;}
是的,我认为您不需要设置每个RevenueReceived对象的承租人属性,只需设置LesseeId即可。不,我只是隐式地这样做。但我可以加上一个,我只是在仔细阅读。所以我会更新fk,然后将子对象设置为未更改?