7

Tôi có 2 bảng đơn giản.ánh xạ bản đồ một đến một trong bảng phân loại

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), 
); 

Trong ứng dụng tôi bản đồ các bảng để mô hình hóa các lớp:

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;} 
} 

tôi sử dụng phần mở rộng hoạt bát và hoạt bát.

Tôi muốn quan hệ bản đồ từ một đến một trong công cụ lập bản đồ trong trình ánh xạ. Có thể không?

Mục tiêu của tôi là khi tôi thêm đối tượng chủ sở hữu đã thiết lập cũng Trạng thái thuộc tính thành db qua kho lưu trữ nó cũng chèn bản ghi làm bảng trạng thái.

Cách tốt nhất để đạt được hành vi này là gì?

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"); 

    } 
} 

Cảm ơn

Trả lời

8

Bạn có thể thử multi-mapping tính năng Dapper của:

[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(); 
    } 
Các vấn đề liên quan