Używam Entity Framework 4.1 w aplikacji MVC 3. Mam jednostkę, w której mam klucz podstawowy składa się z dwóch kolumn (klucz złożony). I to jest używane w innej jednostce jako klucz obcy. Jak stworzyć relację? W normalnych scneriosach używamy:
public class Category
{
public string CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
ale co jeśli kategoria ma klucz dwóch kolumn?
c#
entity-framework
ef-code-first
foreign-keys
composite-key
DotnetSparrow
źródło
źródło
virtual
właściwości nawigacji jest konieczne do leniwego ładowania.virtual
na właściwościach skalarnych pomaga w śledzeniu zmian dołączonych obiektów..HasRequired(p => p.Category)
aleProduct
nie ma właściwości Entity,Catagory
ale dwa identyfikatory, które tworzą złożony klucz kategorii. Czy możesz wyjaśnić, ponieważ wierzę, że nawet się nie skompiluje ... Dzięki!Product
maCategory
w mojej odpowiedzi.Uważam, że najłatwiejszym sposobem jest użycie adnotacji danych we właściwości Navigation w następujący sposób:
[ForeignKey("CategoryId1, CategoryId2")]
public class Category { [Key, Column(Order = 0)] public int CategoryId1 { get; set; } [Key, Column(Order = 1)] public int CategoryId2 { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { [Key] public int ProductId { get; set; } public string Name { get; set; } public int CategoryId1 { get; set; } public int CategoryId2 { get; set; } [ForeignKey("CategoryId1, CategoryId2")] public virtual Category Category { get; set; } }
źródło
Navigation
właściwościach. Jak jednak mogę ustawićcascadeDelete: false
tylko tę właściwość, a nie całą witrynę? Dzięki