将viewModel对象映射到ICollection实体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将viewModel对象映射到ICollection实体相关的知识,希望对你有一定的参考价值。

我有一个带有几个FK引用的基本表。所以当我检索实体进行更新操作时;该实体包含ICollections相关的entites。我的主视图模型包含对应于这些ListsICollections。但是,由于其他一些模型代表1-1映射,我有object而不是List。但在实体内部,他们继续被表示为ICollections

尝试在viewModel和Entity之间进行映射时,这给了我一些问题。我正在使用Automapper进行映射。我有

mapper.Map(viewModel, entity); 

目前我正在从这个映射中省略有问题的模型并单独添加它们。有没有办法在一个映射中处理所有内容?有没有办法处理理想情况下应该是单个对象的ICollections?

编辑

public class MainViewModel
{
        public EntityVM1 vm1 { get; set; }        
        public List<EntityVM2> vm2 { get; set; }        
        public List<EntityVM3> vm3 { get; set; }    
}  

public class MainEntity
{
  ... some scalar props...

public virtual ICollection<Entity1> e1 { get; set; }        
public virtual ICollection<Entity2> e2 { get; set; }        
public virtual ICollection<Entity3> e3 { get; set; }        

}

Entity1和EntityVM1导致问题。

谢谢

答案

你总是可以在AutoMapper的映射配置中覆盖默认的映射系统,你应该看一下文档的runtime polymorphism in the mapping inheritance部分。

如果你想要的实体是一个直的对象,为什么不把Automapper从等式中取出来,只是强迫EF用一对一的系统映射它......即

modelBuilder.Entity<MainEntity>()
        .HasOne(p => p.Entity1)
        .WithOne(i => i.MainEntity)
        .HasForeignKey<Entity1>(b => b.MainEntityForignKey);

了解更多信息,请查看EF docs, under section one-to-one

以上是关于将viewModel对象映射到ICollection实体的主要内容,如果未能解决你的问题,请参考以下文章

将表数据映射到 asp .Net MVC 中的 ViewModel 列表

Android单元测试:如何模拟包含MutableLiveData但仅公开LiveData的对象?

KnockoutJS 映射不

如何检索用户名和姓并将其映射到 ViewModel

如何使用 List<object> 将对象值添加到 viewmodel

将 StackLayout 绑定到 ViewModel 不起作用