[英]EF-CF-Set 'ignored' property from another table value
我正在使用Entity Framework Code-First方法。 下面是我的示例模型。
public class LocalizableEntity
{
public int Id{get;set;}
// this property is 'Ignore'd. Need to set this.
public string Name{get;set;}
// this is the collection of 'Name's in all supported cultures.
public virtual ICollection<LocalizationText> LocalNames{get;set;}
}
使用流暢的API,“名稱”屬性將被忽略,例如Ignore(t=>t.Name)
。 我的想法是通過使用給定的區域性ID查詢來設置LocalNames集合中的Name屬性。 LocalizationText類型將如下所示。
public class LocalizationText
{
public int Id{get;set;}
public string Text{get;set;}
public string Culture{get;set;}
}
我想實現在存儲庫中選擇SINGLE,ALL和BY PREDICATE中的項目的方法(請考慮LocalizableEntities
和LocalizationText
是DbSet),但是要在一個查詢中填充Name屬性。
public LocalizableEntity GetById(int id)
{
var result=LocalizableEntities.Find(id); // selects the item
//the culture will be passed in by other way. Hard-coding here
result.Name=LocalizableEntities.LocalNames.Single(t=>t.Culture=="en-us");
return result;
}
但是以上實現將需要兩個數據庫調用。 我想使它成為一個查詢/表達式。 當也進行批量選擇時,也需要這樣做,即按順序為“ Name
分配值。
單個查詢可以嗎? 如果是,有人可以指導我嗎? 謝謝 :)
忽略實體模型領域的氣味。 您的設計似乎非常適合ViewModel 。 因此,假設您有一個稱為LocalizationText的實體模型和一個稱為LocalizableEntityVM的ViewModel,則可以執行以下操作:
public LocalizableEntityVM GetById(int id, string culture)
{
var result=LocalizationText.Single(le => le.id && le.Culture == culture)
.Select(le => new LocalizableEntityVM
{
Name = le.Text
});
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.