Estou usando o Entity framework 4.1 no aplicativo MVC 3. Eu tenho uma entidade onde tenho a chave primária composta por duas colunas (chave composta). E isso está sendo usado em outra entidade como chave estrangeira. Como criar o relacionamento? Em scnerios normais, usamos:
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; }
}
mas e se a categoria tiver duas chaves de colunas?
c#
entity-framework
ef-code-first
foreign-keys
composite-key
DotnetSparrow
fonte
fonte
virtual
nas propriedades de navegação é necessário para carregamento lento.virtual
nas propriedades escalares ajuda no rastreamento de alterações de objetos anexados..HasRequired(p => p.Category)
masProduct
não tem uma propriedade da Entidade,Catagory
mas dois ids que constituem a chave composta de uma categoria. Pode explicar, porque acredito que nem vai compilar ... Obrigado!Product
temCategory
em minha resposta.Acredito que a maneira mais fácil é usar a anotação de dados na propriedade Navigation assim:
[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; } }
fonte
Navigation
propriedades. No entanto, como posso definir apenascascadeDelete: false
para esta propriedade, não para todo o site? Obrigado