WinForms + Entity Framework kaskadowe usuwanie

0

Witam. Piszę apke w winforms i korzystam z entity framework. Mam problem z kaskadowym usuwanie rekordów. Jak to wyłączyć. korzystam z tego tutoriala: http://www.entityframeworktutorial.net/code-first/cascade-delete-in-code-first.aspx
ale to nie pomaga:
Moje klasy to:

  public class Category
    {
        public Category()
        {
            this.Products = new HashSet<Product>();
        }
        [Key]        
        public int Id { get; set; }
        [Required(ErrorMessage ="Pole wymagane"), MaxLength(16)]        
        [Unique]
        [Display(Name="Nazwa kagegorii:")]
        public string Name { get; set; }
        [Display(Name = "Opis kategorii:")]
        public string Description { get; set; }
        public  string Image { get; set; }
        public virtual ICollection<Product> Products { get; set; }
    }

 public class Product
    {
        public Product()
        {
            this.ProductImage = new HashSet<ProductImage>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string EAN { get; set; }
        public string Description { get; set; }
        public string ShortDescription { get; set; }        
        public int Price   { get; set; }  
        public bool Active { get; set; }
        public string SKU { get; set; }
        public int CategoryId { get; set; }
        public int TaxId { get; set; }
        public virtual Category Category { get; set; }
        public virtual Tax Tax { get; set; }
        public virtual ICollection<ProductImage> ProductImage { get; set; }
    }

robiłem też według tego http://stackoverflow.com/questions/9136255/ef4-1-code-first-how-to-disable-delete-cascade-for-a-relationship-without-navi
ale dalej nic. Chodzi o to, że chce aby przy usuwaniu kategorii jeśli są jakieś produktu to żeby wystąpił jakiś Exception . A jest tak, że jak dam usunięcie kategorii to usuwa mi wszystko czyli produkty należące do usuwanej kategorii.

0

według mnie masz kilka braków w designie EF

np.

public virtual Category Category { get; set; } nie masz zdefiniowanego foreign keya
[ForeignKey("CategoryId")]
public Category Category { get; set; }

teraz może rzuci się wyjątek, nie wiem nigdy nie kasowałem nic ze słownika

0
gośćabc napisał(a):

według mnie masz kilka braków w designie EF

np.

public virtual Category Category { get; set; } nie masz zdefiniowanego foreign keya
[ForeignKey("CategoryId")]
public Category Category { get; set; }

teraz może rzuci się wyjątek, nie wiem nigdy nie kasowałem nic ze słownika

Nie zgodzę się, Jeśli dałem w Produktach CategoryId to automatycznie to staje się kluczem obcym. Jak usunąłem bazę i dodałem na nowo to już działa jak należy. Wcześniej robiłem migrację ale coś nie chciało działać

0
szydlak napisał(a):
gośćabc napisał(a):

według mnie masz kilka braków w designie EF

np.

public virtual Category Category { get; set; } nie masz zdefiniowanego foreign keya
[ForeignKey("CategoryId")]
public Category Category { get; set; }

teraz może rzuci się wyjątek, nie wiem nigdy nie kasowałem nic ze słownika

Nie zgodzę się, Jeśli dałem w Produktach CategoryId to automatycznie to staje się kluczem obcym. Jak usunąłem bazę i dodałem na nowo to już działa jak należy. Wcześniej robiłem migrację ale coś nie chciało działać

to skąd on wie co jest foreign key dla category skoro masz property typu int?

0

a stąd że jest taka zasada w EF że jak dasz pole int {nazwa_klasy_powiązanej}{Id} to jest to z automatu klucz obcy Tak jest w EF
Jak mi nie wierzysz to wypróbuj to przejrzyj ten tutorial: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

0

Może masz włączone kaskadowe usuwanie po stronie bazy?

0

Być może tak było. Usunąłem bazę i dodałem na nowo, I działa odpowiednio.

1 użytkowników online, w tym zalogowanych: 0, gości: 1