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查询?

ADO之间动态切换.. NET实体模型

什么会帮助你使你的代码编译(虽然我不确定这是否是一个很好的解决方案:)),是为不同的船舶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文件中??