如何从不同的视图发布一对多关系
本文关键字:一对多 关系 视图 | 更新日期: 2023-09-27 18:17:17
我有一个record类和一个car类。一条记录可以有多辆车。我试图使用RecordID作为两者之间的关键。在第一个视图中,我的表单正在填充记录类的模型。然后我想转到另一个视图并向记录添加汽车。导航到第二个视图后,如何告诉汽车使用哪个记录ID ?我正在阅读像ViewModels和Unit of Work这样的东西。不确定差异和/或如果这些是我想要的。我将包括我的模型和存储库方法中的一些代码。谢谢!
Record.cs
namespace Train.Models {
public class Record {
public int RecordId { get; set; }
public int Quantity { get; set; }
public DateTime DateCreated { get; set; }
public bool IsActive { get; set; }
public string UserId { get; set; }
public virtual ICollection<Cars> Cars { get; set; }
}
}
Cars.cs
namespace Train.Models {
public class Cars {
public int Id { get; set; }
public string EmptyOrLoaded { get; set; }
public string CarType { get; set; }
//Hopper, flatbed, tank, gondola, etc.
public string ShippedBy { get; set; }
//UP(Union Pacific) or BNSF
public string RailcarNumber { get; set; }
//public virtual ApplicationUser ApplicationUser { get; set; }
public string UserId { get; set; }
public virtual Record Record { get; set; }
}
}
RecordRepository.cs
public void SaveRecord(Record recordToSave) {
if (recordToSave.RecordId == 0) {
recordToSave.DateCreated = DateTime.Now;
_db.Record.Add(recordToSave);
_db.SaveChanges();
} else {
var original = this._db.Record.Find(recordToSave.RecordId);
original.Quantity = recordToSave.Quantity;
original.IsActive = true;
_db.SaveChanges();
}
}
CarsRepository.cs
public void SaveCar(Cars carToSave) {
if (carToSave.Id == 0) {
_db.Cars.Add(carToSave);
_db.SaveChanges();
} else {
var original = this.Find(carToSave.Id);
original.EmptyOrLoaded = carToSave.EmptyOrLoaded;
original.CarType = carToSave.CarType;
original.ShippedBy = carToSave.ShippedBy;
original.RailcarNumber = carToSave.RailcarNumber;
_db.SaveChanges();
}
}
必须为Record ID设置汽车模型的外键。只需在汽车模型中为RecordID添加另一列。
插入Record后,必须返回插入的ID并将此Record ID设置为汽车对象,然后将其保存到数据库中。
public void AddCars(int recordID, List<Cars> carsToSave) {
foreach(Cars car in carsToSave){
car.RecordID = recordID;
_db.Cars.Add(car);
}
_db.SaveChanges();
}
public void EditCars(List<Cars> carsToEdit){
foreach(Cars car in carsToEdit){
Cars editCar = this.Find(car.Id);
editCar.EmptyOrLoaded = car.EmptyOrLoaded;
editCar.CarType = car.CarType;
editCar.ShippedBy = car.ShippedBy;
editCar.RailcarNumber = car.RailcarNumber;
editCar.ApplicationUser = car.ApplicationUser;
editCar.UserId = car.UserId;
_db.SaveChanges();
}
}