这是vsnet 2010中的.net 4.我有多个具有相同结构的数据库。我们最终将它们合并为一个,但这样就行了。我正在编写一个应用程序并且不必编写相同的代码10次,我想在模型之间动态切换。我很近但不太相似。继承人我所拥有的:
using esOrderHeader = Shipping.Models.esShip.OrderHeader;
using fnOrderHeader = Shipping.Models.fnShip.OrderHeader; //OrderHeader is a table in the database
ObjectContext context = null;
IEnumerable< EntityObject> orderHeader = null; //i've tried ObjectSet as well
switch (client)
{
case "es":
context = new esshipEntities();
orderHeader = context.CreateObjectSet<esOrderHeader>();
break;
case "fn":
context = new fnshipEntities();
orderHeader = context.CreateObjectSet<fnOrderHeader>();
break;
}
var query = from row in orderHeader where row.IsFulfilled == false select row;
以下不会编译,因为编译器说“无法解析符号IsFulfilled”,这是我表中的一个字段。如何在实体之间切换并能够对它们运行linq查询?
答案 0 :(得分:2)
什么可以帮助您使代码编译(虽然我不确定它是否是一个很好的解决方案:)),为不同的船只制作OrderHeaders的超类。
namespace Shipping.Models
{
class CommonOrderHeader
{
public bool IsFulfilled { get; set; }
}
}
namespace Shipping.Models.fnShip
{
class OrderHeader : CommonOrderHeader
{
}
}
namespace Shipping.Models.esShip
{
class OrderHeader : CommonOrderHeader
{
}
}
这样,您使用IEnumerable<EntityObject> orderHeader = null;
IEnumerable<CommonOrderHeader> orderHeader = null;
由于EntityObject
不包含属性IsFulfilled
,因此您的代码无法编译。 CommonOrderHeader
包含此字段,因此,您的代码会进行编译。
希望你能让它发挥作用:)
答案 1 :(得分:0)
代码对我来说没问题......你能检查一下实体的“IsFulfilled”属性是否正确映射到数据库表吗? “Orderheader”实际上应该是一个Ienumerable ..这是你写的linq查询对...的权限?我唯一能想到的是对象是否正确映射?另外,两个单独的edmx文件中的esshintntities和fnshipentities ??