"oData"형식으로 업그레이드해야하는 기존 서버 프레임 워크 (WCF 서비스)가 있습니다. http://www.odata.org/ecosystemoData 사용자 지정 공급자
내가 내 코드를 많이 재 작성이 필요하기 때문 "엔티티 프레임 워크"를 사용하지 않도록하려면, 그래서 "사용자 지정 공급자"솔루션을 정착 : 는 나는 "중 하나로, OData"사이트에서 약간의 하나로, OData 샘플을 다운로드했습니다. 내가보기에 모든 예제에서 나를 괴롭힌다.
호출 할 때마다 전체 데이터 모델을 처음부터 초기화하는 CreateDataSource() 메소드 (코드가 첨부 됨)가 호출된다. 이 데모 버전에서는 비즈니스 엔티티 인스턴스 6 개를 다시로드 한 다음 실제 인스턴스에서 필터링하는 것은 큰 일이 아닙니다. 테이블을 정리하고 각각 1000-1000000 개의 행을 포함 할 것입니다.
매번 전체 DB를 메모리에로드하지 않는 방법은 무엇입니까 ?? 나는 아마 뭔가를 놓친 것입니다, 그렇지 않으면이 기술은 유용하지 않았을 것입니다.
protected override DSPContext CreateDataSource()
{
DSPContext context = new DSPContext();
ResourceSet productsSet, categoriesSet;
this.Metadata.TryResolveResourceSet("Products", out productsSet);
this.Metadata.TryResolveResourceSet("Categories", out categoriesSet);
IList<DSPResource> products = context.GetResourceSetEntities(productsSet.Name);
IList<DSPResource> categories = context.GetResourceSetEntities(categoriesSet.Name);
var categoryFood = new DSPResource(categoriesSet.ResourceType);
categoryFood.SetValue("ID", 0);
categoryFood.SetValue("Name", "Food");
categoryFood.SetValue("Products", new List<DSPResource>());
categories.Add(categoryFood);
var categoryBeverages = new DSPResource(categoriesSet.ResourceType);
categoryBeverages.SetValue("ID", 1);
categoryBeverages.SetValue("Name", "Beverages");
categoryBeverages.SetValue("Products", new List<DSPResource>());
categories.Add(categoryBeverages);
var categoryElectronics = new DSPResource(categoriesSet.ResourceType);
categoryElectronics.SetValue("ID", 2);
categoryElectronics.SetValue("Name", "Electronics");
categoryElectronics.SetValue("Products", new List<DSPResource>());
categories.Add(categoryElectronics);
var productBread = new DSPResource(productsSet.ResourceType);
productBread.SetValue("ID", 0);
productBread.SetValue("Name", "Bread");
productBread.SetValue("Description", "Whole grain bread");
productBread.SetValue("ReleaseDate", new DateTime(1992, 1, 1));
productBread.SetValue("DiscontinueDate", null);
productBread.SetValue("Rating", 4);
productBread.SetValue("Category", categoryFood);
productBread.SetValue("BackupCategoryID", 2);
productBread.SetValue("RelatedProductID", 1);
products.Add(productBread);
var productMilk = new DSPResource(productsSet.ResourceType);
productMilk.SetValue("ID", 1);
productMilk.SetValue("Name", "Milk");
productMilk.SetValue("Description", "Low fat milk");
productMilk.SetValue("ReleaseDate", new DateTime(1995, 10, 21));
productMilk.SetValue("DiscontinueDate", null);
productMilk.SetValue("Rating", 3);
productMilk.SetValue("Category", categoryBeverages);
productMilk.SetValue("BackupCategoryID", 2);
productMilk.SetValue("RelatedProductID", 2);
products.Add(productMilk);
var productWine = new DSPResource(productsSet.ResourceType);
productWine.SetValue("ID", 2);
productWine.SetValue("Name", "Wine");
productWine.SetValue("Description", "Red wine, year 2003");
productWine.SetValue("ReleaseDate", new DateTime(2003, 11, 24));
productWine.SetValue("DiscontinueDate", new DateTime(2008, 3, 1));
productWine.SetValue("Rating", 5);
productWine.SetValue("Category", categoryBeverages);
productWine.SetValue("BackupCategoryID", 4);
productWine.SetValue("RelatedProductID", 3);
products.Add(productWine);
((List<DSPResource>)categoryFood.GetValue("Products")).Add(productBread);
((List<DSPResource>)categoryBeverages.GetValue("Products")).Add(productMilk);
((List<DSPResource>)categoryBeverages.GetValue("Products")).Add(productWine);
return context;
사용자 지정 공급자의 샘플 코드에 대해 알고 계십니까? – user355289
http://www.odata.org/ecosystem#samplecode - OData Provider Toolkit을 찾으려면 사용자 정의 공급자의 샘플이 포함되어 있어야합니다. 그러나 IQueryable 샘플을 포함하는 것은 아니며 LINQ to Objects를 사용합니다. –