【发布时间】:2021-12-19 21:19:31
【问题描述】:
我有一个带有船舶和预订导航属性的数据库的预订和船舶类别,
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): Cannot insert explicit value for identity column in table 'Ships ' 当 IDENTITY_INSERT 设置为 OFF 时。` 我想在数据库中创建一个带有船的预订,但我不能插入一个值。所以我尝试用这个 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");
}
任何想法我错过了什么?
【问题讨论】:
标签: c# entity-framework .net-core entity-framework-core blazor