我有一个接收Dto模型并映射到域模型的方法:
方法:
public void CreateAd(CreateAdDto adDto) {
var adDomain = Mapper.Map<CreateAdDto, Ad>(adDto);
}
Dto对象:
public class CreateAdDto
{
public int Model_Id { get; set; }
}
Dto映射域模型:
public class Ad
{
public int Id { get; set; }
public Model Model { get; set; }
}
模特:
public class Model
{
// Primary properties
public int Id { get; set; }
public string Name { get; set; }
public string NameStandard { get; set; }
}
我需要在CreateAd方法中访问Model.NameStandard值,但是当我进行映射时,我只有Model Id,那么如何获得包含NameStandard值在内的所有属性的Model Entity?
我是否必须调用模型GetById(Model_Id)来获取Model属性,或者还有另一种方法,如Attach中的属性可以带来所有属性?
或者我应该在ViewModel中使用Model并使用所有属性传递给Dto和Domain吗?
感谢。
答案 0 :(得分:1)
是的,您必须致电GetById
(可能是Find
或SingleOrDefault
?)或使用显式加载:
context.Ads.Attach(adDomain);
context.Entry(adDomain).Reference(a => a.Model).Load();
(EF> = 4.1 / DbContext
语法)
或者将Model
传递给隐藏字段中的视图,然后从视图中检索它们。这可能只是一个性能问题(我无法分辨哪些性能更好)或者可能是一个安全问题(NameStandard
只包含用户在检查html标记或其中的流量时可以看到的数据线?)。
修改强>
抱歉,上面的显式加载是无稽之谈。只有Ad.Id
可用且想要获取相关的Model
(如果数据库中已存在Ad
),这才有意义。
因此,在这种情况下,只有GetById
才有用。