Внешние ключи в рамках сущности 4.1 - PullRequest
23 голосов
/ 27 марта 2011

Я работаю над Entity Framework 4.1 и использую аннотации данных для внешних ключей. Я хочу знать, как мы можем определить отношение один ко многим между продуктом и категориями. Я хочу отобразить категорию. Категория Идентификатор с 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; }
} 

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

Ответы [ 2 ]

24 голосов
/ 27 марта 2011

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

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 используется для соединения свойства навигации и свойства внешнего ключа.Он содержит либо имя связанного свойства навигации, либо имя связанного свойства внешнего ключа.

6 голосов
/ 27 марта 2011

Для этого вы используете конфигурации объекта.

В конфигурации объекта добавьте это отображение в конфигурацию объекта категории:

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

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

См. сообщение в блоге для получения дополнительной информации.

РЕДАКТИРОВАТЬ Чтобы сделать это с помощью аннотаций данных, я считаю, что правильный подход следующий:

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