簡體   English   中英

EF-CF-Set另一個表值中的“ ignored”屬性

[英]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中的項目的方法(請考慮LocalizableEntitiesLocalizationText是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM