【发布时间】:2021-02-11 21:42:16
【问题描述】:
我正在使用 Entity Framework Core 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 个一对多关系。多个 Generator 只能属于一个 Area/FuelType。
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();
感谢您抽出宝贵时间。
【问题讨论】:
-
我可以看到我的问题被否决了。如果那个人能告诉我哪里出了问题,这样我就可以改进了,那就太好了。
-
保存前不需要设置Area和FuelType属性吗?
标签: c# entity-framework-core entity-framework-6 asp.net-core-webapi