如何将新对象映射到具有外键的对象
How to map a new object to an object with foreign key
我正在使用 Entity Framework 核心 5 迈出第一步,但我正在努力弄清楚如何在约定和流畅 API 定义的一对多关系中添加对象。我使用了这种方法:https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key#manual-configuration
我有 3 个对象“Area”、“FuelType”和“Generator”,它们具有 2 个一对多关系。多个发电机只能属于一种区域/燃料类型。
public partial class Generator
{
[Key]
public Guid Id { get; set; }
[Required]
public int GeneratorAiID { get; set; }
[Required]
public Area Area { get; set; }
public FuelType FuelType { get; set; }
}
我有一个 .NET Core Web API 接收(POST)对象集合:
public async Task<IActionResult> CreateGeneratorCollection(
IEnumerable<GeneratorForCreation> generatorCollection)
{
var generatorEntities = _mapper.Map<IEnumerable<Entities.Generator>>(generatorCollection);
foreach (var generator in generatorEntities)
{
_tradingDashboardRepository.AddGenerator(generator);
}
await _context.SaveChangesAsync();
return Ok("Added");
}
初始对象如下所示:
public partial class GeneratorForCreation
{
[Required]
public int GeneratorAiID { get; set; }
[Required]
public int FuelTypeId { get; set; }
[Required]
public int AreaAiId { get; set; }
[Required]
}
但是,如何将其映射到数据库的预期实体?
如果我使用这个:
public void AddGenerator(Generator generator)
{
if (generator == null)
{
throw new ArgumentNullException(nameof(generator));
}
_context.Generator.Add(generator);
}
我收到错误信息:
INSERT 语句与 FOREIGN KEY 约束“FK_Generator_Area_AreaAiId”冲突
因为 AutoMapper 无法正确映射属性。
处理这个问题的标准方法是什么?
我的 DataContext 如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Generator>()
.HasOne(p => p.Area)
.WithMany(b => b.Generators)
.IsRequired();
modelBuilder.Entity<Generator>()
.HasOne(p => p.FuelType)
.WithMany(b => b.Generators)
.IsRequired();
感谢您抽出宝贵时间。
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_Generator_Area_AreaAiId"
这意味着您正试图插入一条记录,其外键列中的值在外键列中不存在 table。
在插入发电机之前插入区域和燃料类型。
尝试调试以检查 AreaId 和 FuelTypeId 的值。
同时,RequiredAttribute
应该放在字段的顶部。
public partial class Generator
{
[Key]
[Required]
public Guid Id { get; set; }
[Required]
public int GeneratorAiID { get; set; }
[ForeignKey(nameof(FuelType))]
public int FuelTypeId { get; set; }
[ForeignKey(nameof(Area))]
public int AreaAiId { get; set; }
public Area Area { get; set; }
public FuelType FuelType { get; set; }
}
public partial class GeneratorForCreation
{
[Required]
public int GeneratorAiID { get; set; }
[Required]
public int FuelTypeId { get; set; }
[Required]
public int AreaAiId { get; set; }
}
我正在使用 Entity Framework 核心 5 迈出第一步,但我正在努力弄清楚如何在约定和流畅 API 定义的一对多关系中添加对象。我使用了这种方法:https://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key#manual-configuration
我有 3 个对象“Area”、“FuelType”和“Generator”,它们具有 2 个一对多关系。多个发电机只能属于一种区域/燃料类型。
public partial class Generator
{
[Key]
public Guid Id { get; set; }
[Required]
public int GeneratorAiID { get; set; }
[Required]
public Area Area { get; set; }
public FuelType FuelType { get; set; }
}
我有一个 .NET Core Web API 接收(POST)对象集合:
public async Task<IActionResult> CreateGeneratorCollection(
IEnumerable<GeneratorForCreation> generatorCollection)
{
var generatorEntities = _mapper.Map<IEnumerable<Entities.Generator>>(generatorCollection);
foreach (var generator in generatorEntities)
{
_tradingDashboardRepository.AddGenerator(generator);
}
await _context.SaveChangesAsync();
return Ok("Added");
}
初始对象如下所示:
public partial class GeneratorForCreation
{
[Required]
public int GeneratorAiID { get; set; }
[Required]
public int FuelTypeId { get; set; }
[Required]
public int AreaAiId { get; set; }
[Required]
}
但是,如何将其映射到数据库的预期实体?
如果我使用这个:
public void AddGenerator(Generator generator)
{
if (generator == null)
{
throw new ArgumentNullException(nameof(generator));
}
_context.Generator.Add(generator);
}
我收到错误信息: INSERT 语句与 FOREIGN KEY 约束“FK_Generator_Area_AreaAiId”冲突 因为 AutoMapper 无法正确映射属性。
处理这个问题的标准方法是什么?
我的 DataContext 如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Generator>()
.HasOne(p => p.Area)
.WithMany(b => b.Generators)
.IsRequired();
modelBuilder.Entity<Generator>()
.HasOne(p => p.FuelType)
.WithMany(b => b.Generators)
.IsRequired();
感谢您抽出宝贵时间。
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Generator_Area_AreaAiId"
这意味着您正试图插入一条记录,其外键列中的值在外键列中不存在 table。
在插入发电机之前插入区域和燃料类型。
尝试调试以检查 AreaId 和 FuelTypeId 的值。
同时,RequiredAttribute
应该放在字段的顶部。
public partial class Generator
{
[Key]
[Required]
public Guid Id { get; set; }
[Required]
public int GeneratorAiID { get; set; }
[ForeignKey(nameof(FuelType))]
public int FuelTypeId { get; set; }
[ForeignKey(nameof(Area))]
public int AreaAiId { get; set; }
public Area Area { get; set; }
public FuelType FuelType { get; set; }
}
public partial class GeneratorForCreation
{
[Required]
public int GeneratorAiID { get; set; }
[Required]
public int FuelTypeId { get; set; }
[Required]
public int AreaAiId { get; set; }
}