dapper map one to one in classmapper
dapper, dapper-extensions, foreign-keys, relation
Solution
You can try Dapper's multi-mapping feature:
[Test]
public void MyTest()
{
var connection = new SqlConnection("conn string here");
connection.Open();
const string sql =
"select Id = 1, Name ='Bill Gates', Id = 1, Brand = 'Apple', OwnerId = 1";
var result = connection.Query<Owner, Status, Owner>(sql,
(owner, status) =>
{
owner.Status = status;
return owner;
},
commandType: CommandType.Text
).FirstOrDefault();
Assert.That(result, Is.Not.Null);
Assert.That(result.Status, Is.Not.Null);
Assert.That(result.Status.Brand, Is.EqualTo("Apple"));
connection.Close();
}
Problem
I have 2 simple tables. ``` create table Owner ( Id int primary key, Name nvarchar(100), ); create table Status ( Id int primary key, BrandName nvarchar(50) OwnerId int foreign key references Owner(Id), ); ``` In app I map these tables to model classes: ``` public class Owner { public int Id {get;set;} public string Name{get;set;} public Status Status {get;set;} } public class Status { public int Id {get;set;} public string Brand {get;set;} public int OwnerId {get;set;} } ``` I use dapper and dapper extension. I would like map relation one to one in dapper in classmapper. It’s possible? My goal is when I added owner object which has set up also property Status to db via repository it also insert record do status table. What is best way to achieve this behavior? ``` public class OwnerMapper : ClassMapper<Owner> { public OwnerMapper() { Table("Owner"); Map(p=>p.Id).Column("Id").Key(KeyType.Assigned); Map(p=>p.Name).Column("Name"); //how map property status } } public class StatusMapper : ClassMapper<Status> { public StatusMapper() { Table("Status"); Map(p=>p.Id).Column("Id").Key(KeyType.Identity); Map(p=>p.Brand).Column("BrandName"); Map(p=>OwnerId).Column("OwnerId"); } } ```