Как создать экземпляр нулевого объекта и свойства в C# с помощью Dapper через SplitOn?C#

Место общения программистов C#
Ответить
Anonymous
 Как создать экземпляр нулевого объекта и свойства в C# с помощью Dapper через SplitOn?

Сообщение Anonymous »

У меня есть эта хранимая процедура в базе данных:

Код: Выделить всё

SELECT
Cars.CarId AS carCarId,
Cars.VinCode AS carVinCode,
-- Cars.CustomerId AS carCustomerId,
Cars.NumberPlate AS carNumberPlate,
Cars.Brand AS carBrand,
Cars.Model AS carModel,
Cars.Price AS carPrice,
Cars.NumberOfSeats AS carNumberOfSeats,
Cars.NumberOfDoors AS carNumberOfDoors,
Cars.Mileage AS carMileage,
Cars.MaxFuelCapacity AS carMaxFuelCapacity,
Cars.CurrentFuel AS carCurrentFuel,
Cars.Year AS carYear,
Cars.IsFitForUse AS carIsFitForUse,
Cars.Engine AS carEngine,
Cars.Transmission AS carTransmission,
Cars.Interior AS carInterior,
Cars.Wheels AS carWheels,
Cars.Lights AS carLights,
Cars.Signal AS carSignal,
Cars.Color AS carColor,
-- Cars.DealId AS carDealId,
-- Cars.StatusId AS carStatusId,
TransportStatuses.Number AS carStatusId,
Users.IdNumber AS userIdNumber,
Users.FirstName AS userFirstName,
Users.LastName AS userLastName,
Users.DateOfBirth AS userDateOfBirth,
Users.UserName AS userUserName,
Users.Password AS userPassword,
Users.PassportNumber AS userPassportNumber,
Users.DrivingLicenseNumber AS userDrivingLicenseNumber,
-- Users.EmployementDate AS userEmployementDate,
Users.BasicDiscount AS userBasicDiscount,
Users.Category AS userCategory,
Deals.Id AS dealId,
Deals.CarId AS dealCarId,
Deals.VinCode AS dealVinCode,
Deals.CustomerId AS dealCustomerId,
Deals.Price AS dealPrice,
Deals.DealType dealDealType,
Deals.Name AS dealName,
Inspections.InspectionId AS inspectionInspectionId,
Inspections.CarId AS inspectionCarId,
Inspections.VinCode AS inspectionVinCode,
Inspections.InspectorId AS inspectionInspectorId,
Inspections.InspectionDate AS inspectionInspectionDate,
Inspections.StatusId AS inspectionStatusId,
Repairs.Id AS repairId,
Repairs.Date AS repairDate,
Repairs.CarId repairCarId,
Repairs.VinCode AS repairVinCode,
Repairs.MechanicId AS repairMechanicId,
Repairs.IsSuccessfull AS repairIsSuccessfull,
Repairs.TotalCost AS repairTotalCost,
Repairs.TechnicalInfo AS repairTechnicalInfo
FROM
Cars
LEFT JOIN
Users ON Cars.CustomerId = Users.IdNumber
LEFT JOIN
Deals ON Deals.CarId = Cars.CarId
LEFT JOIN
Inspections ON Inspections.CarId = Cars.CarId
LEFT JOIN
Repairs ON Repairs.CarId = Cars.CarId
LEFT JOIN
TransportStatuses ON Cars.StatusId = TransportStatuses.Id
WHERE
Cars.CarId = @Id;
И связанные свойства в классе Car:

Код: Выделить всё

public Deal? Engagement { get; set; }
public List? Inspections { get; set; }
public List? Repairs { get; set; }
public Customer? Owner { get; set; }
А это код сопоставления:

Код: Выделить всё

SqlConnection connection = SupplementData.DataContext.OpenConnection(connectionString);

string SqlStoredProcedureName = "GetCar";
string carId = id.ToString().ToUpper();

object parameter = new
{
Id = carId
};

List cars = new List
(
connection.Query
(
SqlStoredProcedureName,
(car, customerTemp, deal, inspection, repair) =>
{
car.Owner = customerTemp;
car.Engagement = deal;
car.Inspections.Add(inspection);
car.Repairs.Add(repair);

return car;
},
parameter,
splitOn: "userIdNumber, dealId, inspectionInspectionId, repairId"
)
);

// LAMBDA-EXPRESSION APPROACH

// IEnumerable groupedCars = cars.GroupBy(c => c.CarId);

Car car = cars.First();

car.Inspections = cars.Select(c => c.Inspections.Single()).DistinctBy(i => i.InspectionId).ToList();

car.Repairs = cars.Select(c => c.Repairs.Single()).DistinctBy(r => r.Id).ToList();

SupplementData.DataContext.CloseConnection(connection);

return car;
Но любой атрибут, не связанный с таблицей Cars, может иметь значение NULL! Например, все столбцы «Ремонт» могут иметь значение NULL. Итак, Dapper в этом случае выдает исключение, и я не знаю, как это исправить... :*(

Необработанное исключение. System.NullReferenceException: Ссылка на объект не установлена ​​на экземпляр объекта.
в CarRental.BussinessLayer.Managers.ServiceManager.c.b__24_2(Inspection i) в C:\Users\F021\source\ repos\Team1_CarRental\CarRental.BussinessLayer\Managers\ServiceManager.cs:строка 328

в System.Linq.Enumerable.DistinctByIterator[TSource,TKey](IEnumerable

Код: Выделить всё

1 source, Func
2 keySelector, IEqualityComparer

Код: Выделить всё

1 comparer)+MoveNext()   at System.Collections.Generic.List1..стор(ЙЕномерабле1 collection)   at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 источник)

в CarRental.BussinessLayer.Managers.ServiceManager.GetCarFromDatabase(Guid id, String ConnectionString) в C:\Users\F021\source\repos\Team1_CarRental\CarRental.BussinessLayer\ Managers\ServiceManager.cs:строка 328

в CarRental.Presentation.CarRentalPortal.Main(String[] args) в C:\Users\F021\source\repos\Team1_CarRental\CarRental.Presentation\Program. cs:line 95

Я пытаюсь выполнить домашнее задание на онлайн-курсе какой-то частной онлайн-школы, но никто даже не пытается ответить на мои вопросы, когда я спросите, что с этим делать..
Если все смысловые атрибуты не NULL — все работает нормально. Но могут существовать машины без Клиента и т. д... И когда такая машина нашлась — бум, исключение.
Я пробовал сделать все свойства NULL-способными, ничего не помогает...

Подробнее здесь: https://stackoverflow.com/questions/787 ... ia-spliton
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»