首先,我没有与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")
正如我告诉行不通不行对象的属性是空的,但如果我想简单的插入,更新或删除它的工作原理。
我很困惑现在哪里可以成为问题的根源。