WCF & Entity framework
שלום וברכה
אינני מצליח להשתמש בWCF עם EF ואודה מאד למי שיעזור לי!
זה המודל שלי:
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; }}
וזה הסרוויס:
{
[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 איננו תומך בו.
נטרלתי את זה בבנאי של הקונטקס:
עכשיו אני מריץ את המתודות בלי שגיאה, אבל הNavigation properties מחזירים Null.
ניסיתי לטעון אותם במפורש עם Include:
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 הכל עובד כשורה. אבל המאפיין הזה חשוב ואינני רוצה למחקו.
מה עוד אפשר לעשות ולא עשיתי?
אודה מאד למי שיעזור לי.
יום נעים
שלום וברכה
אינני מצליח להשתמש ב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 הכל עובד כשורה. אבל המאפיין הזה חשוב ואינני רוצה למחקו.
מה עוד אפשר לעשות ולא עשיתי?
אודה מאד למי שיעזור לי.
יום נעים