Как оставить существующие данные без изменений, если условие ложно - PullRequest
0 голосов
/ 19 ноября 2018

В настоящее время я работаю над проектом, в котором мне нужно иметь возможность арендовать грузовик для клиента, но мне также нужно добавить данные клиента, если они не существуют.Моя проблема заключается в том, что даже если через форму WPF я введу те же самые данные о клиенте, будет добавлен новый набор данных, что создаст новый идентификатор клиента для одного человека.Как я могу получить базу данных без учета существующих данных клиента?

Мой код обслуживания данных:

 public class DataService
{
    public static void rentTruck(TruckRental toRent, bool isNewCustomer)
    {
        using (var ctx = new DAD_TruckRental_RGMContext())
        {

            if (!isNewCustomer)
            {

                ctx.Entry(toRent.Customer).State = EntityState.Unchanged;//doesnt leave existing customer unchanged
            }
            ctx.Entry(toRent.Truck).State = EntityState.Modified;
            ctx.TruckRental.Add(toRent);
            ctx.SaveChanges();
        }
    }

Мой код cs:

private void Button_Click(object sender, RoutedEventArgs e)
    {

            TruckCustomer cust = new TruckCustomer();
            cust.Age = int.Parse(ageTextBox.Text);
            cust.LicenseNumber = licenseNumberTextBox.Text;
            cust.LicenseExpiryDate = licenseExpiryDateDatePicker.SelectedDate.Value.Date;


            TruckPerson per = new TruckPerson();
            per.Address = addressTextBox.Text;
            per.Telephone = telephoneTextBox.Text;
            per.Name = nameTextBox.Text;

            cust.Customer = per;


            int truckId = int.Parse(truckIdTextBox.Text);
            IndividualTruck truck = DataService.searchTruckByID(truckId);

            decimal priceTotal = decimal.Parse(totalPriceTextBox.Text);

            TruckRental toRent = new TruckRental();
            toRent.TotalPrice = priceTotal;
        toRent.RentDate = rentDateDatePicker.SelectedDate.Value.Date;

        toRent.ReturnDueDate = returnDueDateDatePicker.SelectedDate.Value.Date;
            toRent.Customer = cust;
            toRent.Truck = truck;
            truck.Status = "Rented";


            DataService.rentTruck(toRent, true);

            MessageBox.Show("Truck rented succesfully");


    }

1 Ответ

0 голосов
/ 19 ноября 2018

Вот мое предложение

1- Сначала проверьте, существуют ли данные клиента в БД, используя LicenseNumber 2- Первым шагом будет либо null, либо информация, так что если пусто, добавьте полученного клиентаподробности в противном случае обновите

вот код

public class DataService
{
    public static void rentTruck(TruckRental toRent, bool isNewCustomer, TruckCustomer tcustomer)
    {
        using (var ctx = new DAD_TruckRental_RGMContext())
        {
           var ob =  ctx.TruckCustomer.Where(c => c.LicenseNumber   == customer.LicenseNumber);
           if ( ob != null) //not exist 
            {

            //create new here 
            ctx.TruckCustomer.Add(tcustomer);
        }

        //exist then just update State
        ctx.ob.State = EntityState.Modified;
        ctx.AddOrUpdate(ob);
        ctx.TruckRental.Add(toRent);
        ctx.SaveChanges();
    }
}

Я надеюсь, что это может помочь вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...