我试图用多级成员映射对象:这些是类:
public class Father
{
public int Id { get; set; }
public Son Son { get; set; }
}
public class FatherModel
{
public int Id { get; set; }
public int SonId { get; set; }
}
public class Son
{
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试自动化它的方式:
AutoMapper.Mapper.CreateMap<FatherModel , Father>()
.ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId));
Run Code Online (Sandbox Code Playgroud)
这是我得到的例外:
表达式'dest => Convert(dest.Son.Id)'必须解析为顶级成员而不是任何子对象的属性.请在子类型或AfterMap选项上使用自定义解析程序.参数名称:lambdaExpression
谢谢
让我们从一个简单的视图模型开始:
public class MyViewModel
{
public string Value { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
下拉列表可能如下所示:
@Html.DropDownListFor(m => m.Value, Model.Values)
Run Code Online (Sandbox Code Playgroud)
但是,因为下拉列表需要两个值,所以不能使用它:
public class MyViewModel
{
[UIHint("DropDownList")]
public string Value { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图包含:
@Html.EditForModel()
Run Code Online (Sandbox Code Playgroud)
因为下拉知道源代码没有固有的方法,直到你从UIHint中驱逐:
public DropDownListAttribute : UIHintAttribute
{
public DropDownListAttribute (string valuesSource)
: base("DropDownList", "MVC")
{
}
}
Run Code Online (Sandbox Code Playgroud)
那么人们可能会喜欢它:
public class MyViewModel
{
[DropDownList("Planets")]
public string PlanetId{ get; set; }
public IEnumerable<SelectListItem> Planets { …Run Code Online (Sandbox Code Playgroud) 我有一个Supplier.cs实体及其ViewModel SupplierVm.cs.我正在尝试更新现有供应商,但我收到黄色死亡屏幕(YSOD),并显示错误消息:
操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.
我想我知道它为什么会发生,但我不知道如何解决它.这是一个关于正在发生的事情的截屏视频.我认为我得到错误的原因是因为当AutoMapper做它的事情时,这种关系就会丢失.
码
以下是我认为相关的实体:
public abstract class Business : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string TaxNumber { get; set; }
public string Description { get; set; }
public string Phone { get; set; }
public string Website { get; set; }
public string Email { get; set; }
public bool IsDeleted { get; …Run Code Online (Sandbox Code Playgroud)