我们目前使用sp和udf生成一个XML文档,该文档通过Web服务发送到客户端以供使用。我之前使用过ORM(实体和开放访问),但我总是直接与单个类(表)进行交互。如果我有需要转到多个表的数据,我会在代码中拆分它,只更新数据所属的ORM类(表)。
我想知道我是否可以变得更复杂一点。我可以以某种方式在ORM中创建一个复杂的对象,它是所有这些字段的集合。换句话说,我会将复杂的orm对象的构造函数传递给所需的记录键。然后,对象将从所有表中收集所需的信息并返回给我对象.....然后我可以将其序列化为xml并发送它。
我理解在ORM或DB中的某个地方我必须有逻辑将所有部分收集在一起,所以真的只是寻找输入。
答案 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< - >表映射时没有什么不同。我认为保留一些法线贴图然后在它上面构建你的类更简单。