Только для того, чтобы вы не создавали «магические числа», т.е. 1 = французский и т. Д. Почему бы не использовать CultureInfo.Name?Конечно, вы, вероятно, могли бы придерживаться первых двух символов языка независимо от местоположения.Я нашел 6 для одного только французского.Значения соответствуют стандартам ISO.
// Language contains CultureInfo.Name (iso name that aligns to country/language)
public Addresse GetCompanyAddressByLanguageAndVatNumber(int VatNumber, string Language)
{
switch (Language)
{
case "fr-CA": //Canadian French
case "fr-FR": //France French
return xmlALaCarteContext.CWFirmaAddresseFr.Where(a => a.VatNumber == VatNumber).SingleOrDefault().ToAddresse();
case "nl-NL": //Netherlands Dutch
return xmlALaCarteContext.CWFirmaAddresseFr.Where(a => a.VatNumber == VatNumber).SingleOrDefault().ToAddresse();
default:
throw new NotImplementedException();
}
}
Вы также можете быть хитрыми (любить быть плохим) и иметь средство получения / установки свойств, которое использует свойства виртуальной навигации для возврата «правильного» адреса с учетом текущей культуры и первичногоключ (НДС - это FK, я полагаю?)
public class myParent
{
[Key]
public int Id { get; set; }
// navigation properties
public int VatNumber { get; set; }
private virtual Addresse FrenchAddress { get; set; }
private virtual Addresse DutchAddress { get; set; }
public Addresse CompanyAddress {
get {
switch (System.Globalization.CultureInfo.Name)
{
case "fr-CA": //Canadian French
case "fr-FR": //France French
return FrenchAddress;
case "nl-NL": //Netherlands Dutch
return DutchAddress;
default:
throw new NotImplementedException();
}
set;
}
}
}
с соответствующим описанием Setter и свободно.Я не уверен, но думаю, что ссылка на CompanyAddress приведет к загрузке соответствующего адреса.