2012-11-08 89 views
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; } 
} 

我需要到Model.NameStandard值CreateAd方法訪問得到的,但是當我做了映射,我只有型號ID,所以我怎麼得到的模型實體包含NameStandard值在內的所有屬性?

是否需要撥打Model GetById(Model_Id)才能獲得Model屬性,或者有另一種方法可以像Attach中的屬性一樣帶來所有屬性?

或者我應該在ViewModel中使用模型並傳遞給Dto和具有所有屬性的域?

謝謝。

回答

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是有用的。

+0

嗨,這是我懷疑的,但我希望這不是必要的,所以我創建了一個方法來「加載」實體的其餘數據。感謝您的幫助 ;) – Patrick