Qual è il modo migliore per inserire due tabelle contemporaneamente? Sto riscontrando un problema con la stringa di connessione. Di seguito sono riportati i miei modelli di dati e il mio modello di visualizzazione. Sto usando il primo approccio al codice con il nucleo di asp.net.
public ActionResult Create(BuildPackagingViewModel viewModel)
{
var build = new Build()
{
BuildStep = viewModel.BuildStep,
Category = viewModel.Category,
SubCategory = viewModel.SubCategory,
Details = viewModel.Details,
AdditionalNotes = viewModel.AdditionalNotes
};
var package = new Packaging()
{
CoilWeight = viewModel.Weight,
CoilIDMIN = viewModel.MIN,
CoilIDMAX = viewModel.MAX,
CoilHeight = viewModel.Height,
BuildID = viewModel.BuildID
};
//Models.TestNetCoreEFContext context = new Models.TestNetCoreEFContext();
//var StudentList = context.Student.ToList();
using ( var context = new DataContext())
{
context.Build.Add(build);
package.BuildID = build.BuildID;
context.Packaging.Add(package);
context.SaveChanges();
};
return View();
}
}
qui sotto ho il modello e i modelli di vista
public class Build
{
public int BuildID { get; set; }
// order of each individual step
public int BuildStep { get; set; }
public string Category { get; set; }
public string SubCategory { get; set; }
public string Details { get; set; }
public string AdditionalNotes { get; set; }
[Required(AllowEmptyStrings = true)]
public string Operator { get; set; }
public DateTime? Date { get; set; }
public int? Weight { get; set; }
public int? Amount { get; set; }
//public int? PackageID { get; set; }
public Other Other { get; set; }
public Packaging Packaging { get; set; }
}
public class Packaging
{
public int PackagingID { get; set; }
public int Weight { get; set; }
public int? MIN { get; set; }
public int? MAX { get; set; }
public int? Height { get; set; }
public int BuildID {get; set;}
public Build Build { get; set; }
}
public class BuildPackagingViewModel
{
public int BuildID { get; set; }
public int BuildStep { get; set; }
public string Category { get; set; }
public string SubCategory { get; set; }
public string Details { get; set; }
public string AdditionalNotes { get; set; }
[Required(AllowEmptyStrings = true)]
public string Operator { get; set; }
public DateTime? Date { get; set; }
public int? Weight { get; set; }
public int? Amount { get; set; }
//Packaging model
//public int PackageID { get; set; }
public int Weight { get; set; }
public int? MIN { get; set; }
public int? MAX { get; set; }
public int? Height { get; set; }
}
Credo che il problema sia nel mio contesto di dati
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options)
: base(options)
{ }
public static string ConnectionString { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(ConnectionString);
}
}
//public DataContext(DbContextOptions<DataContext> options) : base(options)
//{
//}
public DbSet<Packaging> Packaging { get; set; }
public DbSet<Build> Build { get; set; }
public DbSet<Draw> Draw { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Other>().ToTable("Other");
modelBuilder.Entity<Build>().ToTable("Build");
modelBuilder.Entity<Packaging>().ToTable("Packaging");
}
}
Ecco il file startup.cs
public void ConfigureServices(IServiceCollection services)
{
//foreach (var service in services)
//{
// string typeName = service.ImplementationType == null ?
// (service.ImplementationInstance == null ? service.ImplementationFactory.GetType().ToString() : service.ImplementationInstance.ToString())
// : service.ImplementationType.ToString();
// Debug.WriteLine($"{service.ServiceType}: {typeName}, {service.Lifetime}");
//}
services.AddMvc();
//services.AddDbContext<DataContext>(options =>
// options.UseSqlServer(Configuration.GetConnectionString("DataContext")));
DataContext.ConnectionString = Configuration.GetConnectionString("DataContext");
}
di seguito è la vista su cui stavo lavorando
@model DemoOnMVVM.Models.ViewModels.BuildPackagingViewModel
@{
ViewBag.Title = "Build";
}
<h2>Login</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend > LoginViewModel </legend>
<div class="editor-label">
@Html.LabelFor(model => model.BuildStep)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BuildStep)
@Html.ValidationMessageFor(model => model.BuildStep)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Category)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Category)
@Html.ValidationMessageFor(model => model.Category)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SubCategory)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.SubCategory)
@Html.ValidationMessageFor(model => model.SubCategory)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Details)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Details)
@Html.ValidationMessageFor(model => model.Details)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.AdditionalNotes)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AdditionalNotes)
@Html.ValidationMessageFor(model => model.AdditionalNotes)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Weight)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Weight)
@Html.ValidationMessageFor(model => model.Weight)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MIN)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MIN)
@Html.ValidationMessageFor(model => model.MIN)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MAX)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MAX)
@Html.ValidationMessageFor(model => model.MAX)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Height)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Height)
@Html.ValidationMessageFor(model => model.Height)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.BuildID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BuildID)
@Html.ValidationMessageFor(model => model.BuildID)
</div>
<p>
<input type = "submit" value="Create" />
</p>
</fieldset>
}
Cosa sta realmente accadendo? Stai ottenendo un record di costruzione ma nessun record di pacchetto?
Guardando il tuo codice presumo che BuildId sia una colonna IDENTITY o simile - se si commettono le modifiche di Build prima si può quindi accedere a BuildId da usare quando si salva il pacchetto?