ADO之间动态切换.. NET实体模型
本文关键字:NET 实体模型 之间 动态 ADO | 更新日期: 2023-09-27 18:13:08
这是。net 4 vs 2010。我有多个数据库具有相同的结构。我们最终会将它们合并为一个,但这是一种方式。我正在编写一个应用程序,为了避免编写相同的代码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;
下面不能编译,因为编译器说"不能解析符号iscompleted",这是我的表中的一个字段。我如何在实体之间切换并能够对它们运行linq查询?
什么会帮助你使你的代码编译(虽然我不确定这是否是一个很好的解决方案:)),是为不同的船舶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<CommonOrderHeader> orderHeader = null;
IEnumerable<EntityObject> orderHeader = null;
由于EntityObject
不包含属性IsFulfilled
,您的代码无法编译。CommonOrderHeader
包含此字段,因此,您的代码可以编译。
希望你能让这个工作:)
代码看起来不错…你能检查是否实体的"iscompleted"属性被正确映射到数据库表?"Orderheader"实际上应该是一个Ienumerable ..这就是你编写linq查询的对象,对吧?我唯一能想到的是如果对象被映射了,对吧?另外,船舶实体和船舶实体是否在两个独立的edmx文件中??