首先,我沒有與dapper.net太多的經驗,也許這個問題有簡單的解決方案。地圖SQL列類屬性
我想使用多映射功能。
我簡化了我的問題。
我有2個表。
第一表
CARS
色譜柱:
- card_id的(PK)
- CAR_LOCATION
- CAR_STATUS
個第二表
BRANDS
色譜柱:
- ID(PK)
- card_id的(FK)
- BRAND_NAME
- BRAND_LOGO
我需要執行這個查詢:
SQL_CMD:
SELECT * FROM CARS
LEFT JOIN BRANDS
ON CARS.CARD_ID = BRANDS.CARD.ID;
在.NET應用程序,我在2個POCO類,這些表映射。
public class Car
{
public int CarId {get;set}
public string CarLocation {get;set;}
public string CarStatus {get;set;}
public Brand Brand {get;set;}
}
public class Brand
{
public int Id {get;set}
public int CardId {get;set;}
public string BrandName {get;set;}
public string BrandLogo {get;set;}
}
當我查詢上面的SQL CMD:
var data = connection.Query<Car, Brand, Car>(SQL_CMD, (car, brand) =>
{
car.Brand = brand;
return car;
}, commandTimeout: 50000, splitOn:"ID")
我得到空的結果。
恕我直言,問題是在類屬性上映射SQL列,因爲如果將道具Card.CarId更改爲Car.CAR_ID,則會填充此屬性。
有什麼辦法如何將「SQL列」映射到SqlMapper.Query<T1,T2,TReturn>
中的類屬性到類屬性?
我知道存在ClassMapper
但我沒有找到方法如何在這種情況下使用。
感謝
編輯:
我嘗試添加映射類,但不能工作
public class CarMapper : ClassMapper<Car>
{
Table("CARS");
Map(c=>c.CarId).Column("CAR_ID").KeyType(KeyType.Assigned);
Map(c=>c.CarLocation).Column("CAR_LOCATION");
Map(c=>c.CarStatus).Column("CAR_STATUS");
}
public class BrandMapper : ClassMapper<Brand>
{
Table("BRANDS");
Map(c=>c.Id).Column("ID").KeyType(KeyType.Assigned);
Map(c=>c.CarId).Column("CAR_ID");
Map(c=>c.BrandName).Column("BRAND_NAME");
Map(c=>c.BrandLogo).Column("BRAND_LOGO");
}
添加映射組件
DapperExtensions.DapperExtensions.SetMappingAssemblies(new List<Assembly>
{
Assembly.GetAssembly(typeof(CarMapper)),
Assembly.GetAssembly(typeof(BrandMapper)),
});
這個設置完畢後執行查詢
var data = connection.Query<Car, Brand, Car>(SQL_CMD, (car, brand) =>
{
car.Brand = brand;
return car;
}, commandTimeout: 50000, splitOn:"ID")
正如我告訴行不通不行對象的屬性是空的,但如果我想簡單的插入,更新或刪除它的工作原理。
我很困惑現在哪裏可以成爲問題的根源。