Tác giả chỉ là chế giễu kho, không phải là thực thể. EntityFramework tạo ra các ObjectQueries, nhưng anh ta kết thúc chúng và kho lưu trữ của nó trả về các câu hỏi IObjectQueries. Anh ta làm điều này để anh ta có thể dễ dàng giả lập dữ liệu, sau đó trong quá trình cứu anh ta chỉ xác thực các thực thể.
Nếu bạn chỉ đang cố gắng tạo kho lưu trữ "giả", bạn có thể tạo mẫu T4 của riêng mình và lặp lại qua tệp edmx và tạo mã. Nhưng không có lý do gì để tạo ra POCOS? Chúng đã tồn tại, tại sao bạn cần tạo lại chúng? Ông tóm tắt tất cả mọi thứ thành một "chung chung" FakeObjectSet do đó, thực sự không có nhiều mã để viết?
Bạn có cố gắng để tạo ra điều này:
public IObjectSet<Blog> Blogs
{
get
{
return _blogs ?? (_blogs = new FakeObjectSet<Blog>());
}
set
{
_blogs = value as FakeObjectSet<Blog>;
}
}
private FakeObjectSet<Blog> _blogs;
Nếu vậy tôi sẽ đoán bạn sẽ dành nhiều thời gian với T4 sau đó bạn sẽ chỉ viết nó.
Ví dụ T4 mà không cần khai báo lớp ... bạn có thể làm t4 hoàn chỉnh bằng cách làm theo this blog
<#
foreach (EntitySet set in container.BaseEntitySets.OfType<EntitySet>())
{
#>
public IObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>
{
get{
return <#=code.FieldName(set)#> ?? (<#=code.FieldName(set)#> = FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>"));
}
set{
<#=code.FieldName(set)#> = value as FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>>("<#=set.Name#>");
}
}
private FakeObjectSet<<#=MultiSchemaEscape(set.ElementType, code)#>> <#=code.FieldName(set)#>;
<#
}
#>
Trong đó sẽ tạo ra mã này:
public IObjectSet<Blogs>{
get{
return _Blogs?? (_Blogs = FakeObjectSet<Blog>("Blogs"));
}
set{
_Blogs= value as FakeObjectSet<Class>("Blogs");
}
}
private FakeObjectSet<Blog> _Blogs;
Side lưu ý .
IObjectSet được chứa trong System.Data để Thêm một tham chiếu đến System.Data.Entity.dll
Mayby Tôi đã bỏ lỡ hiểu, tôi chỉ dựa trên bài viết này. Tôi biết rằng tác giả có các lớp POCOS, nhưng tôi có DB lớn, đã có, tôi phải tạo edmx từ DB này và tiếp theo sau nhiều difficoulties (đây là Oracle DB), tôi có thể sử dụng các mẫu T4 để tạo các lớp POCO, bởi vì tôi không viết chúng trước bằng tay. Bây giờ tôi muốn thêm bài kiểm tra đơn vị và tôi phải thử đối tượng bối cảnh của tôi nếu tôi muốn kiểm tra kho. Vì vậy, T4 đã tạo các lớp POCO cho các thực thể và lớp cho Ngữ cảnh, nhưng thiếu giao diện cho ngữ cảnh này nên tôi không thể tạo mô hình dựa trên giao diện này. – Simon
Nhờ http://slappyza.wordpress.com/2010/08/08/getting-the-entity-framework-to-generate-an-interface-for-mocking/ Tôi đã giải quyết sự cố ngay bây giờ .. . :) – Simon
+1. Thực sự, tất cả những gì cần phải xảy ra là thêm 'I' vào các khai báo' ObjectSet ... 'hiện có ... –