具有导航属性的实体的ef核心插入列表

时间:2019-11-13 14:26:47

标签: 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 { 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;
            }
        }

然后我创建一个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;
        }

最后,我尝试保存收到的收入列表。

public void InsertRevenuesReceived(List<RevenueReceived> revenuesReceived)
        {
            using (var ctx = new DataContext())
            {
                ctx.RevenueReceived.AddRange(revenuesReceived);
                ctx.SaveChanges();
            }
        }

,并且我收到以下错误。我有些困惑,为什么它试图再次插入承租人表。有没有办法只插入主键,却又没有尝试再次插入承租人呢?

  

Microsoft.EntityFrameworkCore.DbUpdateException HResult = 0x80131500
  Message =更新条目时发生错误。见内在   例外。
  源= Microsoft.EntityFrameworkCore.Relational StackTrace:位于   Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection   连接)   Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(DbContext   _,ValueTuple 2 parameters) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func 3个操作,Func 3 verifySucceeded) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable 1   commandBatches,IRelationalConnection连接)位于   Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList 1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList 1   entryToSave)   Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean   acceptAllChangesOnSuccess)   Microsoft.EntityFrameworkCore.DbContext.SaveChanges(布尔   acceptAllChangesOnSuccess)   Microsoft.EntityFrameworkCore.DbContext.SaveChanges()在   accessdataimport.DataImportService.InsertRevenuesReceived(清单1   收到的收入)   C:\ Users \ c-bdelling \ source \ repos \ Minerals \ accessdataimport \ DataImportService.cs:line   100,位于accessdataimport.Program.Main(String [] args)中   C:\ Users \ c-bdelling \ source \ repos \ Minerals \ accessdataimport \ Program.cs:line   29

     

内部异常1:SqlException:无法为以下项插入显式值   当IDENTITY_INSERT设置为OFF时,表“ Lesses”中的标识列。

0 个答案:

没有答案
相关问题