创建复杂的实体对象

时间:2012-12-14 22:41:42

标签: c# xml entity-framework

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

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

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

1 个答案:

答案 0 :(得分: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< - >表映射时没有什么不同。我认为保留一些法线贴图然后在它上面构建你的类更简单。