我有一個帶有 Ship 和 Reservations 導航屬性的 DB 的預訂和船類,
public class Reservation {
public Reservation() {
Ship = new Ship();
}
public int Id { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Ship Ship { get; set; }
}
public class Ship {
public int Id { get; set; }
public string Name { get; set; }
public string Port{ get; set; }
public List<Reservation> Reservations { get; set; }
}
DBcontext.cs 檔案:
protected override void OnModelCreating(ModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Reservation>().HasOne(r => r.Ship).WithMany(s => s.Reservations);
modelBuilder.Entity<Reservation>().HasOne(u => u.Person).WithMany(r => r.Reservations);
modelBuilder.Entity<Ship>().HasMany(res => res.Reservations).WithOne(s => s.Ship);
//This line generates the error
modelBuilder.Entity<Reservation>().Property(a => a.Ship).ValueGeneratedNever();
}
public DbSet<Reservation> Reservations { get; set; }
public DbSet<Ship> Ships { get; set; }
}
}
我添加生成錯誤的這一行和下面的 executeSqlRawAsync 方法的原因是我試圖解決這個錯誤:Microsoft.Data.SqlClient.SqlException (0x80131904):當 IDENTITY_INSERT 時,無法為表 'Ships' 中的標識列插入顯式值設定為 OFF。` 我想在 DB 中創建一個帶有船的預訂,但我無法插入值。所以我嘗試用這個 ValueGeneragtedNever 方法和 executeRawSql 方法修復它,但它給了我標題中的錯誤。
public async Task CreateReservation(ReservationGetDTO reservationDTO)
{
await _context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [dbo].[Reservations] ON");
_context.Reservations.Add(Mapper.Map(reservationDTO, new Reservation()));
await _context.SaveChangesAsync();
await _context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [dbo].[Reservations] OFF");
}
任何想法我錯過了什么?
uj5u.com熱心網友回復:
修復保留類,移除 [DatabaseGenerated(DatabaseGeneratedOption.None)] 和建構式
public class Reservation {
public int Id { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public int ShipId { get; set; }
public virtual Ship Ship { get; set; }
}
public class Ship {
public int Id { get; set; }
public string Name { get; set; }
public string Port{ get; set; }
public virtual ICollection<Reservation> Reservations { get; set; }
}
并且由于您使用的是 ef core 5 ,因此從 dbcontext 中洗掉了所有流暢的 API,因此您不需要它們
并嘗試使用此代碼添加新專案
public async Task CreateReservation(ReservationGetDTO reservationDTO)
{
_context.Reservations.Add(Mapper.Map(reservationDTO, new Reservation()));
await _context.SaveChangesAsync();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351602.html
上一篇:自動檢索物體框架外鍵關系模型
下一篇:如何重用keras函式模型的層
