0

我们目前使用 sp's 和 udf's 生成一个 XML 文档,该文档通过 Web 服务发送到客户端以供使用。我以前使用过 ORM(实体和开放访问),但我总是直接与单个类(表)进行交互。如果我有需要转到多个表的数据,我会在代码中将其拆分,然后只更新数据所属的 ORM 类(表)。

我想知道我是否可以变得更复杂一些。我可以以某种方式在 ORM 中创建一个复杂的对象,它是所有这些字段的聚合。换句话说,我会将所需的记录键传递给我的复杂 orm 对象的构造函数。然后该对象将从所有表中收集所需的信息并将该对象返回给我.....然后我可以将其序列化为 xml 并以它的方式发送。

我知道在 ORM 或 DB 的某个地方,我必须有逻辑将所有部分收集在一起,所以真的只是在寻找输入。

4

1 回答 1

1

如果我想要一个由多个表中的数据组成的对象,我只需将所有表添加到 .edmx 文件中。从那里我可以创建一个获得我想要的任何东西的类。无需 1:1 配对。在我的基于主键创建对象的方法中,TableA您可以这样做;

    Obj GetObj(string primaryKey)
    {
        dataBase context = new dataBase();
          var obj = (from a
                     in context.TableA
                     where a.Id == primaryKey
                     select a);
          var otherObj = (from b
                          in context.TableB
                          where b.Id == a.ForeignKey
                          select b);

         Obj foo = new Obj();

         foo.Id = a.Id;
         foo.SomethingElse = a.Somthing;
         foo.FromB = b.Id;
         foo.AnInt = (int)b.count;

         return foo;
    }

保存一些更改;

   void AddNewObject()
   {
         dataBase context = new Context;
         TableA a = new TableA();
         TableB b = new TableB();

         a.Id = this.Id;
         a.OtherField = this.OtherField;
         b.Key = this.BKey;
         b.SomeInt = this.SomeInt;

         context.AddObject("TableA", a);
         context.AddObject("TableB", b);

         context.SaveChanges();
   }

当然,这些将需要一些我没有包括在内的错误处理,但这个概念与您拥有标准 EntityObject<->Table 映射时的概念没有什么不同。我认为保留一些法线映射然后在其之上构建你的类更简单。

于 2012-12-14T23:21:33.347 回答