0

我有一个接收 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 值,但是当我进行映射时,我只有模型 ID,那么如何获取包含 NameStandard 值在内的所有属性的模型实体?

我是否必须调用模型 GetById(Model_Id)才能获取模型属性,或者是否有另一种方式,例如 Attach 中的属性可以带来所有属性?

还是应该在 ViewModel 中使用模型并将所有属性传递给 Dto 和域?

谢谢。

4

1 回答 1

1

是的,您必须调用GetById(可能FindSingleOrDefault?)或使用显式加载:

context.Ads.Attach(adDomain);
context.Entry(adDomain).Reference(a => a.Model).Load();

(EF >= 4.1/DbContext语法)

或者传递Model到隐藏字段中的视图并从视图中检索它们。这可能只是一个性能问题(我不知道什么性能更好)或者可能是一个安全问题(NameStandard只包含用户在检查 html 标记或网络上的流量时被允许查看的数据?)。

编辑

对不起,上面的显式加载是胡说八道。Ad.Id只有当您有空并且想要获取相关的Model(如果Ad数据库中已经存在)时才有意义。

因此,只有GetById在这种情况下才有用。

于 2012-11-08T23:13:09.007 回答