Внешние ключи в структуре сущностей 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; }
}
Пожалуйста, предложите
Ответы
Ответ 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; }