У меня есть модель с несколькими объектами. Например, у меня есть order
, которые имеют CustomerId
для внешнего ключа. В модели у меня есть поля из order
и некоторые поля из объекта customer
. Когда я сохраняю новую запись, я хотел бы сначала сохранить customer
, получить новое значение идентификации и поместить его в таблицу order
. Как это сделать? Я могу сделать это, получив MAX(ID)
из таблицы customer
, однако я уверен, что есть лучший способ справиться с этим.Как получить только что сгенерированный идентификатор в модели MVC
Это мой метод контроллера:
public ActionResult Create(OrderModels model, FormCollection form)
{
try
{
Customer customer = new Customer() { FirstName = model.FirstName, MiddleName = model.MiddleName, SecondName = model.SecondName, Email = model.Email, PhoneNbr = model.PhoneNbr };
int orderSource = Int32.Parse(form["OrderSourceList"]);
int paymentType = Int32.Parse(form["PaymentTypeList"]);
string warehouseGuid = form["Warehouses"];
ProductLogic productLogic = new ProductLogic();
Product product = productLogic.GetProductByArticle(model.Article);
DateTime now = DateTime.Now;
SalesOrder salesOrder = new SalesOrder()
{
OrderNbr = model.OrderNbr,
OrderSourceId = orderSource,
NpWarehouseRef = new Guid(warehouseGuid),
TTN = model.TTN,
OrderStatusId = 1,
PaymentTypeId = paymentType,
OrderDate = DateTime.Now
};
using (AccountingRepository repository = new AccountingRepository())
{
repository.AddOrUpdate<Customer>(customer);
repository.AddOrUpdate<SalesOrder>(salesOrder);
}
return RedirectToAction("Index");
}
catch (Exception e)
{
return View();
}
}
AccountingRepository имеет dispose
метод
public void Dispose()
{
if (_context != null)
{
_context.SaveChanges();
_context.Dispose();
}
}
Мой Order
класс:
с использованием системы; с использованием System.ComponentModel.DataAnnotations; с использованием System.Collections.Generic; с использованием System.ComponentModel.DataAnnotations.Schema; с использованием System.Data.Entity.ModelConfiguration;
namespace Accounting.Entity
{
[Table("SalesOrder", Schema = "dbo")]
public class SalesOrder
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? Id { get; set; }
...
public int? CustomerId { get; set; }
...
public virtual Customer Customer { get; set; }
internal class Config : EntityTypeConfiguration<SalesOrder>
{
public Config()
{
HasRequired(r => r.Customer)
.WithMany(r => r.SalesOrder)
.HasForeignKey(r => r.CustomerId);
}
}
}
}
Мой Customer
класс:
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace Accounting.Entity
{
[Table("Customer", Schema = "dbo")]
public class Customer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? Id { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string SecondName { get; set; }
public string PhoneNbr { get; set; }
public string Email { get; set; }
public virtual HashSet<SalesOrder> SalesOrder { get; set; }
internal class Config : EntityTypeConfiguration<Customer>
{
public Config()
{
}
}
}
}
Если вы используете EF, он будет заботиться о нем для вас, если у вас есть навигационные свойства на вашей модели. –
на самом деле вы используете EF для обработки отношений для вас, и вам не нужно получать последние записи или область видимости ... –
Я изменил вопрос и добавил классы контроллера и сущности. –