2 つを含む Context をクエリし、EntityObjects
その結果を厳密に型指定されたインターフェイスのリストにキャストするシナリオがあります。
エンティティ オブジェクト
public class CompanyEntity : EntityObject
{
public string Name { get; set; }
public EntityCollection<StaffEntity> Staff { get; set; }
}
public class StaffEntity : EntityObject
{
public string FullName { get; set; }
}
ドメイン オブジェクト
public class Company : IOrganisation
{
public string Name { get; set; }
public List<IPerson> Staff { get; set; }
}
public class StaffMember : IPerson
{
public string FullName { get; set; }
}
インターフェイス
public interface IOrganisation
{
string Name { get; set; }
List<IPerson> Staff { get; set; }
}
public interface IPerson
{
string FullName { get; set; }
}
を無視してStaffEntity
をクエリするだけの場合、次のようCompanyEntity
に a にキャストするのList<IOrganisation>
は簡単です。
List<IOrganisation> orgs = (from c in context.Companies
select new Company
{
Name = c.Name
}).ToList<IOrganisation>();
ただし、両方をクエリして、関連するオブジェクトをドメイン オブジェクトにEntityObjects
投影し、オブジェクトのプロパティに割り当てることができるようにキャストすると、問題が発生します。StaffEntity
StaffMember
List<IPerson>
Staff
Company
私はいくつかのことを試しましたが、私が得た最も近いものは次のとおりでしたが、実行時にEFは呼び出しが好きではありませんでした.ToList<IPerson>()
:
List<IOrganisation> orgs = (from c in context.Companies.Include("Staff")
select new Company
{
Name = c.Name,
Staff = (from s in c.Staff
select new StaffMember
{
FullName = s.FullName,
}).ToList<IPerson>()
}
into results
select results).ToList<IOrganisation>();
したがって、基本的には、LINQ to Entities クエリを使用して、インターフェイスのリストのネストされたオブジェクト グラフを取得する必要があります。インターフェイスのリストとしてドメイン オブジェクトが必要な理由は、具体的なドメイン オブジェクトまたは Entity Framework への参照を持たない他のアセンブリに渡されるためですが、それらは実装するインターフェイスへの参照を持っています。さらに、インターフェイスを実装するのは適切ではないEntityObjects
ので、私が尋ねている質問が可能かどうかを確認したいと思います。
前もって感謝します。