实体框架 - 填充剩余的属性

时间:2012-11-08 20:36:13

标签: asp.net-mvc entity-framework

我有一个接收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吗?

感谢。

1 个答案:

答案 0 :(得分: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才有用。