У меня есть родительские дочерние отношения, и я не могу использовать команду scaffolding в EF Core, потому что у дочерней таблицы нет ключа.Мне не разрешено добавлять ключи, поэтому я застрял в архитектуре.
Когда я сохраняю изменения, я получаю следующее внутреннее исключение: Неверное имя столбца 'NewBusinessMasterNbTransactionId'
Код в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
var connection = Configuration.GetSection("SqlConnection1").Value;
services.AddScoped<IDharma, DharmaRepo>();
services.AddDbContext<DharmaContext>(options => options.UseSqlServer(connection));
}
Код вDharmaContext (я удалил большую часть столбцов данных, чтобы сделать его короче):
public partial class DharmaContext : DbContext
{
public DharmaContext()
{
}
public DharmaContext(DbContextOptions<DharmaContext> options)
: base(options)
{
}
public virtual DbSet<NewBusinessMaster> NewBusinessMaster { get; set; }
public virtual DbSet<NewBusinessDetail> NewBusinessDetail { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasAnnotation("ProductVersion", "2.2.4-servicing-10062");
modelBuilder.Entity<NewBusinessMaster>(entity =>
{
entity.HasKey(e => e.NbTransactionId);
entity.ToTable("NewBusiness_Master");
entity.Property(e => e.NbTransactionId).HasColumnName("NB_TRANSACTION_ID");
entity.Property(e => e.NbLob)
.HasColumnName("NB_LOB")
.HasMaxLength(2)
.IsUnicode(false);
});
modelBuilder.Entity<NewBusinessDetail>(entity =>
{
entity.HasKey(e => e.NbTransactionId);
entity.ToTable("NewBusiness_Detail");
entity.Property(e => e.NbTransactionId).HasColumnName("NB_TRANSACTION_ID");
});
entity.Property(e => e.NbAgentNumber)
.IsRequired()
.HasColumnName("NB_AGENT_NUMBER")
.HasMaxLength(9)
.IsUnicode(false);
}
}
Модели (я удалил большую часть столбцов данных, чтобы их было легче читать):
public partial class NewBusinessMaster
{
public int NbTransactionId { get; set; }
public string NbLob { get; set; }
public List<NewBusinessDetail> NewBusinessDetail { get; set; }
public NewBusinessMaster()
{
NewBusinessDetail = new List<NewBusinessDetail>();
}
}
public partial class NewBusinessDetail
{
public int NbTransactionId { get; set; }
public string NbAgentNumber { get; set; }
}
}
Код для добавления и сохранения записей:
NewBusinessMaster nbMaster = new NewBusinessMaster();
nbMaster.NbLob = "AU";
NewBusinessDetail nbDetailItem = new NewBusinessDetail();
foreach (XElement item in screenH202.Descendants())
{
nbDetailItem = new NewBusinessDetail();
if (!string.IsNullOrEmpty(item.Value))
{
nbDetailItem.NbAgentNumber = nbMaster.NbAgentNumber;
}
}
_context.NewBusinessMaster.Add(nbMaster);
try
{
await _context.SaveChangesAsync(); //this line throws the error
}
catch (DbUpdateException dbEx)
{
throw;
}
Скриншоты SQL:
![enter image description here](https://i.stack.imgur.com/nAi1i.png)
![enter image description here](https://i.stack.imgur.com/A1JOx.png)