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

Как установить внешний ключ в классе EntityTypeConfiguration

Я только начал создавать класс EntityTypeConfiguration и сделал следующее

public class Xyz
{
   public int PlaceId { get; set; }

    public string  Name { get; set; }

    public DbGeography Location { get; set; }

    public int HumanTypeId { get; set; }

    public int AddressId { get; set; }
}

и в классе EntityTypeConfiguration

 public sealed class XyzConfiguration:EntityTypeConfiguration<Xyz>
{
    public XyzConfiguration()
    {
        ToTable("Place", "dbo");
        HasKey(p => p.PlaceId);   
        Property(p => p.PlaceId)
            .HasColumnName("PlaceId")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        Property(p => p.Name);
        Property(p => p.Location). ;
        Property(p => p.HumanTypeId);
        Property(p => p.AddressId);
    }
}

Теперь, как установить DbGeography и столбцы внешнего ключа HumanTypeId , AddressId?

Заранее спасибо

4b9b3361

Ответ 1

Это зависит от того, что вы собираетесь делать с столбцами. Если у вас есть столбцы внешнего ключа, такие как AddressId, у вас, вероятно, есть несколько объектов Address, которые вы хотите связать с вашими объектами Xyz. Вам нужно решить, как entites относятся друг к другу, и настроить сопоставление, которое вы хотите между ними.

Вам понадобится свойство навигации в классе Address или вашем классе Xyz, иначе нет привязки внешнего ключа, а ваши чужие идентификационные столбцы будут рассматриваться как обычные столбцы ( что хорошо, если это то, что вы хотите).

Итак, если бы вы добавили свойство навигации в свой объект Xyz

public class Xyz
{
    // Your code
    public int AddressId { get; set; }
    public virtual Address MyAddress { get; set; }
}

// Your Address class
public class Address
{
    public int ID;
}

Вы можете настроить отображение, выполнив что-то в этих строках (оно будет меняться в зависимости от отношения:

public sealed class XyzConfiguration : EntityTypeConfiguration<Xyz>
{
    public XyzConfiguration()
    {
        // Your code.

        this.HasOptional(x => x.MyAddress)      // Your Xyz has an optional Address
            .WithMany()                         // Address may be owned by many Xyz objects
            .HasForeignKey(x => x.AddressId);   // Use this foreign key.
    }
}

Я не пробовал использовать пространственные типы и EF, но я бы начал здесь: http://msdn.microsoft.com/en-us/data/hh859721.aspx

Там много информации о конфигурациях сопоставления при начале работы с EF-страницами: http://msdn.microsoft.com/en-us/data/ee712907 попробуйте "Свободный API" - Конфигурирование/Сопоставление Свойства и типы "

Здесь также немного сокращенное объяснение различных типов ассоциаций: Code First: Независимые ассоциации и ассоциации внешних ключей?