Code First CTP: несколько PK или FK - PullRequest
1 голос
/ 12 октября 2010

В некоторых случаях мы можем дублировать ссылки на PK / FK, поэтому сущность A и сущность B находятся в отношениях PK / FK, но 3 раза. Таким образом, сущность A будет иметь 3 коллекции FK, а сущность B будет иметь 3 ссылки на сущности. Как это работает с шаблоном кода в первую очередь? Соблюдаете ли вы соглашение об именах, применяемое в отношении модели / базы данных Entity Framework вначале (EntityA, EntityA1 и т. Д.), И оно знает, как связать эти отношения, или есть дополнительный шаг или что?

Спасибо.

1 Ответ

2 голосов
/ 13 октября 2010

Если бы вы определили свои классы следующим образом

public class EntityA
{
    public int EntityAId { get; set; }
    public virtual EntityB EntityB1 { get; set; }
    public virtual EntityB EntityB2 { get; set; }
    public virtual EntityB EntityB3 { get; set; }
}

public class EntityB
{
    public int EntityBId { get; set; }
    public string Name { get; set; }
}

EF Code First создаст две таблицы (EntityAs, EntityBs). По конвекции таблица EntityAs будет иметь первичный ключ EntityAId и три внешних ключа, связанных с EntityB, которые называются (EntityB1_EntityBId, EntityB2_EntityBId, EntityB3_EntityBId).

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

Например:

public class EntityA
{
    public int EntityAId { get; set; }
    public int MySpecialFkName { get; set; }
    [RelatedTo(ForeignKey = "MySpecialFkName")]
    public EntityB EntityB1 { get; set; }
}

Если вам не нужны метаданные RelatedTo в вашем классе POCO, вы можете вместо этого определить отношение в методе OnModelCreating.

modelBuilder.Entity<EntityA>().HasRequired(p => p.EntityB1)
            .HasConstraint((fk, pk) => fk.MySpecialFkName == pk.EntityBId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...