Использование ASP.NET MVC, Entity Framework для выполнения операций CRUD в базе данных SQL Server. Я вставляю новую информацию в связанные таблицы. У меня есть множество таблиц, над которыми я делаю эту операцию, но я никогда раньше не сталкивался с этой ошибкой.
Когда я отправляю свои данные в контроллер I, они проходят через типичные данные EFF. Однако, когда он попадает в мою строку db.SaveChanges()
, я получаю эту ошибку оптимистичного исключения параллелизма, ссылаясь на то, что данные могли измениться из базы данных. В этой конкретной ситуации в таблице нет данных, поэтому для меня это не имеет смысла.
Я последовал рекомендации и прочитал кое-что об этом. Реализовано одно из их исправлений, но оно не работает. Не работает, потому что ищет GetDatabaseValues()
, а их нет. Я пропустил что-то глупое здесь? Я просто беру значения формы и вставляю их в две разные таблицы, которые я настроил.
Вот контроллер:
[HttpPost]
public ActionResult SubmitUwSelections(FormCollection form)
{
var cbRating = form["cabRating"]; // Cab Raing ddl
var filing = form["fileRqd"]; // filing required ddl
var ifta = form["cbIfta"]; // IFTA cb
var lossControl = form["lcRqd"]; // Loss control cb
var app1 = form["AppInFile"]; //Application app in file cb
var app2 = form["AppRqd"]; //Application app rqd cb
var um1 = form["UMInFile"]; //UM in file cb
var um2 = form["UMRqd"]; // UM rqd cb
var terror1 = form["terrorInFile"]; // terror in file cb
var terror2 = form["terrorRqd"]; // terror rqd cb
var lossRun1 = form["LossRunInFile"];// loss run in file cb
var lossRun2 = form["LossRunRqd"]; //Loss run rqd cb
var inspect1 = form["cbVehicleInspectInFile"]; //vehicle inspect in file cb
var inspect2 = form["cbVehicleInspectRqd"]; // vehicle inspect rqd cb
var mvr1 = form["cbMvrInFile"]; // mvr in file cb
var mvr2 = form["cbMvrRqd"]; // mvr rqd cb
var psComments = form["cifComments"]; //section 2 comment box
var uniqPolicy = form["UniqPolicy"];
string c = uniqPolicy.ToString();
int u = Convert.ToInt32(c);
// need to form up and create variables for the segmentation part of the insert.
// Segmentation pieces.
var segYear = form["segYear"]; //seg tab segmentation year
var tractors = form["tractors"]; //seg tab tractors
var truck = form["trucks"]; //seg tab trucks
var su = form["serviceUnits"]; //seg tab service units
var estMileage = form["estAnnMile"]; // segmentation tab Est-Annual Mileage
var estRvenue = form["estAnnRev"]; //seg tab est annual revenue
var radius = form["radius"]; // seg tab radius ddl
var primaryOp = form["primaryOperation"]; //Seg tab primary operation ddl
int l, m, n, o, p = 0;
l = Convert.ToInt32(segYear); //Converts seg year into int
m = Convert.ToInt32(tractors); //converts seg tractors to int
n = Convert.ToInt32(truck); //converts seg trucks to int
o = Convert.ToInt32(su); //converts seg service units to int
p = Convert.ToInt32(estMileage); //converts seg est ann mileage to int
decimal revenue = Convert.ToDecimal(estRvenue); //converts seg est revenue to decimal
using (TruckingDb db = new TruckingDb())
{
// Create dto to insert Form collection items
CIF_Record_InsertDTO dto = db.CIF_Record.Find(u); //checking to see if row exists
CIF_Record_InsertDTO dtoSend = new CIF_Record_InsertDTO();
CIF_Segmentation_InsertDTO segDto = new CIF_Segmentation_InsertDTO();
if (dto == null)
{
// create UniqPolicy dto
dtoSend.UniqPolicyId = u;
// Create user insert dto.
string user = Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"\") + 1);
dtoSend.Underwriter = user;
// set the cif record comments section.
dtoSend.Comments = psComments;
// Set the UwSegmentation value
dtoSend.UwSegmentationSubmit = true;
// Set segmentation dto's
segDto.SegmentationYear = l;
segDto.Tractors = m;
segDto.Trucks = n;
segDto.ServiceUnits = o;
segDto.EstAnnualMileage = p;
segDto.EstAnnualRevenue = revenue;
segDto.Radius = radius;
segDto.PrimaryOperation = primaryOp;
// 1. inserting dto's into two different tables
db.CIF_Record.Add(dtoSend);
db.CIF_Segmentation.Add(segDto); //2.
}
else
{
// temporarily empty
}
bool saveFailed;
do
{
saveFailed = false;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
saveFailed = true;
//update original values from the db
var entry = ex.Entries.Single();
entry.OriginalValues.SetValues(entry.GetDatabaseValues());
}
} while (saveFailed);
}
return RedirectToAction("CompleteCIF");
}
do while
чуть выше первого исправления, но он не работает. Хит поймать и нажать entry.GetDatabaseValues()
, но, конечно, нет никаких значений OG для начала. Почему saveChanges()
не работает? Спасибо еще раз за помощь.