Подтвердить что ты не робот

Внешние ключи в структуре сущностей 4.1

Я работаю над Entity Framework 4.1 и использую аннотации данных для внешних ключей. Я хочу знать, как мы можем определить отношение "один к многим" между продуктом и категориями. Я хочу отобразить категорию. categoryId с product.cid

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 CId { get; set; }

    public virtual Category Category { get; set; }
} 

Пожалуйста, предложите

4b9b3361

Ответ 1

Оба эти подхода должны работать:

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    [ForeignKey("Category")]
    public string CId { get; set; }

    public virtual Category Category { get; set; }
}

Или:

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public string CId { get; set; }

    [ForeignKey("CId")]
    public virtual Category Category { get; set; }
} 

ForeignKeyAttribute используется для сопряжения свойства навигации и свойства внешнего ключа. Он содержит либо имя связанного свойства навигации, либо имя соответствующего свойства внешнего ключа.

Ответ 2

Вы используете для этого параметры конфигурации.

В конфигурации entity добавьте это сопоставление в конфигурацию сущности категории:

HasMany<Product>(x => x.Products).WithRequired().HasForeignKey(x => x.CId);

Вам нужно всего лишь сопоставить его на одном из ваших классов, а DbContext достаточно умен, чтобы использовать его.

Подробнее см. сообщение в блоге.

EDIT Чтобы сделать это, используя аннотации данных, я считаю, что правильный подход выглядит следующим образом:

[RelatedTo(RelatedProperty="Products", Key="CId", RelatedKey="CategoryId")]
public virtual Category Category { get; set; }