두 개의 Entity Framework 모델이 구조가 동일하며 오라클 DB의 코드 우선을 사용하여 생성되었습니다 (2 개의 "트윈"테이블은 사용하지 마십시오. 이유를 물어보십시오. DB에 대한 제어권이 없습니다.)Entity Framework 6 + Oracle 구조가 동일한 두 테이블을 쿼리하는 방법
Linq와 동일한 쿼리를 두 번 다시 작성하지 않으려 고하는 효율적인 방법을 찾고있었습니다.
몇 가지 예 :
[Table("ORACLE.TABLE1")]
public partial class MyModel1
{
[Key]
[Column(Order = 0)]
[StringLength(3)]
public string field1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(3)]
public string field2 { get; set; }
[Key]
[Column(Order = 2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int field3 { get; set; }
// -- many other fields
}
[Table("ORACLE.TABLE2")]
public partial class MyModel2
{
[Key]
[Column(Order = 0)]
[StringLength(3)]
public string field1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(3)]
public string field2 { get; set; }
[Key]
[Column(Order = 2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int field3 { get; set; }
// -- many other fields, same as above
}
어딘가에, 내가 가진 :
var result1 = from t in db.MyModel1s
where t.field1 == myparameter1
&& t.field2 == myparameter2
&& t.field3 == myparameter3
select t;
var result2 = from t in db.MyModel2s
where t.field1 == myparameter1
&& t.field2 == myparameter2
&& t.field3 == myparameter3
select t;
var result = result1.ToList();
... 그리고 마지막으로 :
이public virtual DbSet<MyModel1> MyModel1s { get; set; }
public virtual DbSet<MyModel2> MyModel2s { get; set; }
데이터를 가져 오는에 대한 나의 현재의 사소한 못생긴 솔루션이있다 ...
foreach (var res2 in result2)
{
var m1 = new MyModel1
{
field1 = res2.field1,
field2 = res2.field2,
field3 = res3.field3
};
result.Add(m1);
}
이제 result
에 내가 원하는 모든 것이 포함되어 있습니다. 더 좋은 방법, 제안이 있어야합니까?
사실,이 때문에 작동하지 않습니다 : http://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query 그리고 난 DTO를 매핑 된 엔티티와 연결할 수 없기 때문에 DTO를 만들 수 없습니다. – tonjo
맞습니다. 잊어 버렸습니다. 동일한 DTO를 사용하여 두 쿼리를 모두 투영 할 수 있습니까? 제 생각에는 서버 측에서이 쿼리를 실행하는 것이 가장 좋은 해결책이라고 생각합니다. 그렇지 않으면 데이터베이스를 두 번 왕복하고 두 결과를 메모리에 병합해야합니다. 당신은'AsEnumerable' 확장 메소드를 사용하여 하나의 쿼리에서 그렇게 할 수 있습니다.이 마지막 아이디어에 대한 도움이 필요합니까? – octavioccl
Remus가 제안한대로 DBA에게 뷰 생성을 요청해야한다고 생각합니다. 그렇지 않으면 네 마지막 아이디어에 대한 도움이 필요합니다. – tonjo