WinForms + Entity Framework kaskadowe usuwanie

Odpowiedz Nowy wątek
2017-05-17 20:20
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.entityframeworktut[...]ade-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/ques[...]r-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.

edytowany 7x, ostatnio: DibbyDum, 2017-05-18 12:16

Pozostało 580 znaków

2017-05-17 22:14
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

edytowany 1x, ostatnio: gośćabc, 2017-05-17 22:14

Pozostało 580 znaków

2017-05-17 22:21
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ć

Pozostało 580 znaków

2017-05-17 22:28
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?

Pozostało 580 znaków

2017-05-17 22:50
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[...]or-an-asp-net-mvc-application

edytowany 1x, ostatnio: szydlak, 2017-05-17 22:53
jeżeli to działa to fajnie, ale to powinno wydać Ci się jako niebezpieczne i niezbyt jednoznaczne podejście; dzięki za link; - gośćabc 2017-05-17 22:57
Nie wydaje mi się że to jest złe: Na wszystkich tutorialach EF tak widziałem: http://www.entityframeworktut[...]t/code-first-conventions.aspx. Na dole masz wypisane konwencje podejścia Code First. Jest tam o generowaniu kluczy obcych - szydlak 2017-05-17 23:01
ja mam już dużą bazę z kilkuset migracjami, zaskoczyło mnie takie coś, tylko ja nie robiłem tutoriali tylko zadawałem pytania google i odpowiedzi brałem ze stackoverflow; sorry za mislead; - gośćabc 2017-05-17 23:05
Ja też pierwszym razem robiłem jak ty. Ale nie dawałem atrybuty [ForeignKey] i też tworzyły się klucze obce. Ten atrybut wydaje mi się, że daje tylko możliwość ustawienia nazwy klucza obcego: http://www.entityframeworktut[...]-attribute-in-code-first.aspx - szydlak 2017-05-17 23:10

Pozostało 580 znaków

2017-05-18 11:57
0

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

Pozostało 580 znaków

2017-05-18 21:49
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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