问题描述
我在我的项目中使用 Fluent-API(ASP.NET Core MVC 中的 EF Core)将代码映射到 sql Server 中的数据库,但我面临外键问题:
请帮帮我!
我有 LoaiDichVu
类和 LoaiDichVuConfiguration
类如下:
public class LoaiDichVu
{
public Guid ID { get; set; }
public string tenLoaiDichVu { get; set; }
public string moTa { get; set; }
public string trangThai { get; set; }
public string fields1 { get; set; }
public string fields2 { get; set; }
public string fields3 { get; set; }
public string fields4 { get; set; }
public string fields5 { get; set; }
public ICollection<DichVu> ICDichVu { get; set; }
}
public class LoaiDichVuConfiguration : IEntityTypeConfiguration<LoaiDichVu>
{
public void Configure(EntityTypeBuilder<LoaiDichVu> builder)
{
builder.ToTable("LoaiDichVu");
builder.HasKey(ldv => ldv.ID);
builder.Property(ldv => ldv.ID).HasDefaultValuesql("newsequentialid()");
builder.Property(ldv => ldv.tenLoaiDichVu).HasMaxLength(30);
builder.Property(ldv => ldv.moTa).HasMaxLength(60);
builder.Property(ldv => ldv.trangThai).HasMaxLength(30);
}
}
而且,我有 DichVu
和 DichVuConfiguration
类如下:
public class DichVu
{
public Guid ID { get; set; }
public Guid ID_LoaiDichVu { get; set; }
public LoaiDichVu LoaiDichVu { get; set; }
//Tên dịch vụ: Nước khoáng...
public string tenDichVu { get; set; }
//Đơn vị tính: Chiếc/ cái/ bao...
public string donViTinh { get; set; }
public decimal donGia { get; set; }
//Đơn vị tính: VNĐ
public string donViTien { get; set; }
public string moTa { get; set; }
public string trangThai { get; set; }
public string fields1 { get; set; }
public string fields2 { get; set; }
public string fields3 { get; set; }
public string fields4 { get; set; }
public string fields5 { get; set; }
public ICollection<ChiTiet_HoaDon> ICChiTietHoaDon { get; set; }
}
public class DichVuConfiguration : IEntityTypeConfiguration<DichVu>
{
public void Configure(EntityTypeBuilder<DichVu> builder)
{
builder.ToTable("DichVu");
builder.HasKey(dv => dv.ID);
builder.Property(dv => dv.ID).HasDefaultValuesql("newsequentialid()");
builder.Property(dv => dv.tenDichVu).HasMaxLength(50);
builder.Property(dv => dv.donViTinh).HasMaxLength(20);
builder.Property(dv => dv.donViTien).HasMaxLength(10);
builder.Property(dv => dv.moTa).HasMaxLength(100);
builder.Property(dv => dv.trangThai).HasMaxLength(30);
builder.HasOne(dv => dv.LoaiDichVu).WithMany(dv => dv.ICDichVu).HasForeignKey(dv => dv.ID_LoaiDichVu).OnDelete(DeleteBehavior.NoAction);
}
}
然后,我有一个 ModelBuilderExtensions
类:
public static class ModelBuilderExtensions
{
public static void Seed(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<LoaiDichVu>().HasData(
new LoaiDichVu() { ID = Guid.NewGuid(),tenLoaiDichVu = "Eat" }
);
modelBuilder.Entity<DichVu>().HasData(
new DichVu() { ID = Guid.NewGuid(),ID_LoaiDichVu = Guid.NewGuid(),tenDichVu = "Rice",donGia = 99}
);
}
}
我已成功添加迁移。
如果我如上设置 ID_LoaiDichVu
,我会收到以下错误:
我不知道如何从 LoaiDichVu
表中获取 ID 以分配给 ID_LoaiDichVu
表中的 DichVu
请指导我如何通过代码分配而不是复制和分配
示例:LoaiDichVu
(ID = 63763eb2-e537-4b97-a394-0529d216aa74)
然后赋值
DichVu (ID = Guid.NewGuid(),ID_LoaiDichVu = 63763eb2-e537-4b97-a394-0529d216aa74)
谢谢! :)
解决方法
您可以将 Guid 的值分配给一个变量,然后将其分配给 ID (LoaiDichVu) 和 ID_LoaiDichVu 初始化数据时。
public static class ModelBuilderExtensions
{
public static void Seed(this ModelBuilder modelBuilder)
{
var LoaiDichVuId = Guid.NewGuid();
modelBuilder.Entity<LoaiDichVu>().HasData(
new LoaiDichVu() { ID = LoaiDichVuId,tenLoaiDichVu = "Eat",}
);
modelBuilder.Entity<DichVu>().HasData(
new DichVu() { ID = Guid.NewGuid(),ID_LoaiDichVu = LoaiDichVuId,tenDichVu = "Rice",donGia = 99 }
);
}
}