我有2个服务模型和2个DAL模型。在创建新作者时,我想将其书籍保存到Book表。所以,我发送有效载荷作为json。但是,如果我尝试将模型适应Book模型,它的值为null。所以我可以解决这个问题。我也试过model.Adapt<IEnumerable<Book>>()
,这也是空的。
public async Task<AuthorRequest> CreateAsync(AuthorRequest model)
{
var authorEntity= model.Adapt<Author>(); // works fine
var bookEntity =model.Adapt<Book>();//null
}
Service.Models
public class AuthorRequest :Identifiable<string>
{
public string override Id{get;set;}
[Attr("name")]
public string Name { get; set; }
[Attr("surname")]
public string Surname { get; set; }
public ICollection<BookRequest> Books{get; set; }
}
public class BookRequest :Identifiable<string>
{
public string override Id{get;set;}
public string Title { get; set; }
}
DAL.Model
public class Author : AuditableEntity
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("surname")]
public string Surname { get; set; }
[JsonProperty("books")]
public Relationship<IList<Book>> Books;
}
public class Book :AuditableEntity
{
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("Author")]
public Relationship<IList<Author>> Author;
}
使用mapster进行映射
TypeAdapterConfig<DAL.Models.Author, Service.Models.AuthorRequest>.NewConfig();
TypeAdapterConfig<DAL.Models.Book, Service.Models.AuthorRequest>.NewConfig();
TypeAdapterConfig<DAL.Models.Book, Service.Models.BookRequest>.NewConfig();
TypeAdapterConfig<Service.Models.AuthorRequest, DAL.Models.Author>.NewConfig();
TypeAdapterConfig<Service.Models.AuthorRequest, DAL.Models.Book>.NewConfig();
TypeAdapterConfig<Service.Models.BookRequest, DAL.Models.Book>.NewConfig();
AuthorRequest.JSON
{
"name": "William",
"surname": "Shakespeare",
"books": [{
"title": "Macheth"
}]
}
答案 0 :(得分:0)
为什么期望model.Adapt<Book>()
在这里产生任何结果?映射实体通常通过复制类似的属性来工作。这适用于AuthorRequest
和Author
,因为它们都包含相同的属性。因此,当您映射model
AuthorRequest
时,您可以正确获取已填充的Author
对象。
但是,当您尝试将相同的AuthorRequest
映射到(单个)Book
时,由于它们太不相同而无效:AuthorRequest
具有属性{{ 1}},Name
和Surname
,而Books
的属性为Book
和Title
。那里根本没有匹配。
您可以做的是映射 Author
对象中的书籍,执行此操作:
AuthorRequest
这不会将模型中的var bookEntities = model.Books.Adapt<Book[]>();
个对象的集合映射到BookRequest
数组。这应该按预期工作。
请注意,Mapster已足够智能,可以自行映射嵌套类型。如果查看Book
对象,您将看到嵌套的图书实体也已正确映射。因此,如果您想将authorEntity
(包含AuthorRequest
s)映射到包含BookRequest
个实体的Author
实体,那么您的第一行应该已经足够了:
Book