【发布时间】:2019-03-29 18:08:40
【问题描述】:
我正在使用现有的 sqlserver 数据库。 在这个数据库中有两个包含“地址信息”的表。 一张表有法语的信息,另一张有荷兰语的信息。 两个表格的布局相同。
[Key]
[Column("fu_VAT")]
public int VatNumber { get; set; }
[Column("fu_EindDatum")]
public int EindDatum { get; set; }
[Column("fu_vorm")]
public string Vorm { get; set; }
[Column("fu_NameOrigin")]
public int NameOrigin { get; set; }
[Column("fu_AdresOrigin")]
public int AdresOrigin { get; set; }
[Column("fu_Name")]
public string Name { get; set; }
[Column("fu_StraatNaam")]
public string StraatNaam { get; set; }
所以我创建了一个包含上述定义的“地址”类。 然后我创建了 2 个继承“Addresse”的类“Addresse_FR”和“Addresse_NL”。
在我的存储库中,我创建了以下方法:
public Addresse GetCompanyAddressByLanguageAndVatNumber(int VatNumber, int Language)
{
switch (Language)
{
case 1: //Frans
return xmlALaCarteContext.CWFirmaAddresseFr.Where(a => a.VatNumber == VatNumber).SingleOrDefault().ToAddresse();
default:
return xmlALaCarteContext.CWFirmaAddresseNl.Where(a => a.VatNumber == VatNumber).SingleOrDefault().ToAddresse();
}
}
我想知道是否有更好的方法来解决这个问题。
【问题讨论】:
-
如果两个表结构完全相同,我想知道为什么不为它们使用同一个表,并带有确定文化/语言的附加字段。
-
@HagayGoshen 正如我所说,它是一个现有的数据库。其他应用程序使用相同的数据库。我不允许对数据库进行更改。
-
如果你想要一个“更干净”的代码解决方案,你需要清理你的数据库端。如果你不能改变你的数据库结构,你可以添加一个存储过程来接收文化/语言 id 并从正确的表中返回数据,但是你将你的 if 条件从你的应用程序移动到你的数据库。
标签: c# entity-framework-6 data-modeling