WCF & Entity framework

כלליים

New member
WCF & Entity framework

שלום וברכה
אינני מצליח להשתמש בWCF עם EF ואודה מאד למי שיעזור לי!

זה המודל שלי:
public class Category{
public int Id { get; set; }
public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } = new HashSet<Product>();}public class Product{ public int Id { get; set; } public string Name { get; set; } public int CategoryId { get; set; } public virtual Category Category { get; set; }}public class ProductsContext : DbContext{ public DbSet<Product> Products { get; set; } public DbSet<Category> Categories { get; set; }}

וזה הסרוויס:
[ServiceContract]public interface IService1
{
[OperationContract]
Product[] GetProducts(); [OperationContract] Category[] GetCategories();}public class Service1 : IService1{ readonly ProductsContext context = new ProductsContext(); public Product[] GetProducts() { var arr = context.Products.ToArray(); return arr; } public Category[] GetCategories() { var arr = context.Categories.ToArray(); return arr; }}

עכשיו, אני מריץ את הסרוויס, ומנסה להריץ את אחץ המתודות. אני מקבל שגיאה. חפשתי בגוגל ומצאתי שהשגיאה היא בגלל מנגנון הLazyLoading שWCF איננו תומך בו.
נטרלתי את זה בבנאי של הקונטקס:
Configuration.ProxyCreationEnabled = false;Configuration.LazyLoadingEnabled = false;
עכשיו אני מריץ את המתודות בלי שגיאה, אבל הNavigation properties מחזירים Null.

ניסיתי לטעון אותם במפורש עם Include:
public Product[] GetProducts(){
var arr = context.Products.Include(p => p.Category).ToArray();
return arr;
}
public Category[] GetCategories()
{
var arr = context.Categories.Include(x => x.Products).ToArray(); return arr;}

אבל עכשיו שוב אי אפשר להריץ אף מתודה.
בדקתי ומצאתי שאם אני מוחק את המאפיין Category.Products הכל עובד כשורה. אבל המאפיין הזה חשוב ואינני רוצה למחקו.

מה עוד אפשר לעשות ולא עשיתי?
אודה מאד למי שיעזור לי.

יום נעים
 

כלליים

New member
מצאתי את הפתרון

האמת היא שהתייאשתי מWCF והלכתי ללמוד asp.net 5 webapi.
קראתי מאמר נחמד על webapi, שמתאר את הבעיה בדיוק נמרץ וגם את הפתרון...

הבעיה היא הפניה מעגלית והפתרון הוא [IgnoreDataMember]. עובד יפה גם בwcf ובwebapi כאחד.
 
למעלה