Tôi đang cố gắng sử dụng Dapper để giao tiếp với các bảng nhà cung cấp thành viên ASP.NET SQL. Tôi đã bọc lớp SqlMembershipProvider và thêm một phương thức bổ sung để cho tôi các MembershipUsers đưa ra một tiêu chí nhất định liên quan đến một số bảng tùy chỉnh mà tôi có.Gọi hàm tạo tùy chỉnh bằng Dapper?
Khi truy vấn dữ liệu bằng Dapper, Dapper lần đầu tiên khởi tạo lớp với hàm tạo ít tham số và sau đó "ánh xạ" các cột được trả về vào các thuộc tính trên đối tượng.
Tuy nhiên, thuộc tính UserName trên lớp MembershipUser không có trình đặt. Đánh giá từ xung quanh dòng 1417 trong Dapper SqlMapper.cs, phương thức GetSettableProps()
chỉ nhận được các thuộc tính có thể cài đặt.
Tôi đã cố gắng thực hiện truy vấn MultiMap để gọi hàm tạo, nhưng vấn đề với đó là các đối tượng được truyền vào truy vấn đã bị thiếu UserName.
Tôi đoán tôi có thể sửa đổi phương thức GetSettableProps()
, nhưng tôi không chắc liệu điều đó có hiệu quả hay không hoặc liệu nó có ảnh hưởng đến mã hiện tại của tôi hay không.
Có cách nào để tôi gọi hàm tạo tùy chỉnh mà lớp MembershipUser có không?
Hoặc có sự thay đổi hợp lý mà tôi có thể thực hiện cho Dapper để hỗ trợ cho tình huống của tôi không?
** CẬP NHẬT **
câu trả lời của Marc để sử dụng phương pháp phi generic/Query động() là đúng, nhưng đối với hậu thế, đây là phương pháp tôi đã đề cập đến Dapper bên:
static List<PropInfo> GetSettableProps(Type t)
{
return t
.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Select(p => new PropInfo
{
Name = p.Name,
Setter = p.DeclaringType == t ? p.GetSetMethod(true) : p.DeclaringType.GetProperty(p.Name).GetSetMethod(true),
Type = p.PropertyType
})
.Where(info => info.Setter != null)
.ToList();
}
gì Dòng 1417 trông giống như btw bạn có thể đăng dụ mã của bạn cho những người khác mà có lẽ có thể nhanh chóng giúp bạn ..? – MethodMan
Thành thật mà nói, tôi chỉ sử dụng loại trung gian ở đây - hoặc API truy vấn không chung chung (thông qua "động") ... Tôi có một số mã ctor mà tôi có thể nâng từ protobuf-net, nhưng tôi ' m thực sự không chắc chắn nó sẽ có lợi ... –