2016-01-14 4 views
1

Как указать имя пользовательского столбца с отношениями HasOne в EF7?EF7 - Пользовательское имя столбца для отношений HasOne

Рассмотрим следующие примеры классов:

public class House 
{ 
    public int Id { get; set; } 
    public int BedroomCount { get; set; } 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    public int Id { get; set; } 
    public string StreetName { get; set; } 
    public string StreetNumber { get; set; } 
} 

И это беглый конфигурация:

modelBuilder.Entity<House>() 
    .HasOne(x => x.Address) 
    .WithOne() 
    .OnDelete(DeleteBehavior.Cascade); 

Что приводит к такой конфигурации БД:

CREATE TABLE [House] (
[Id] int NOT NULL IDENTITY, 
[AddressId] int, 
[BedroomCount] int NOT NULL, 
CONSTRAINT [PK_House] PRIMARY KEY ([Id]), 
CONSTRAINT [FK_House_Address_AddressId] FOREIGN KEY ([AddressId]) REFERENCES [Address] ([Id]) ON DELETE CASCADE); 

CREATE TABLE [Address] (
[Id] int NOT NULL IDENTITY, 
[StreetName] nvarchar(max), 
[StreetNumber] nvarchar(max), 
CONSTRAINT [PK_Address] PRIMARY KEY ([Id])); 

Как указать имя столбца кроме «AddressId» на столе «Дома»? Я не могу найти метод, похожий на HasColumnName, как и в свойствах, отличных от навигации.

Я использую Entity Framework 7 RC1-Final.

ответ

0

Вы можете использовать Data Annotations для настройки внешнего ключа ваших отношений.

public int AddressID { get; set; } 

[ForeignKey("AddressID")] 
public Address Address { get; set; } 

Для этого требуется свойство, которое будет использоваться в качестве внешнего ключа в ваших отношениях. Кроме того, обратите внимание, что рекомендуется иметь явный внешний ключ для ваших отношений, кроме теневого внешнего ключа. Это предотвратит возникновение множества проблем при вставке/обновлении, поскольку вам не нужно устанавливать все свойства навигации Address, чтобы сохранить объект House. Смотрите проблему here

Не тестировался, но, возможно, это могло бы работать (не могу найти способ установить EF7 прямо сейчас)

modelBuilder.Entity<House>() 
    .HasOne(x => x.Address) 
    .WithOne() 
    .OnDelete(DeleteBehavior.Cascade); 
    .HasForeignKey(x => x.AddressID); 

Вы можете проверить здесь больше примеров: Foreign Key Relationships EF7

+0

Я не вижу метод .Map() в EF7. – SkipHarris

+0

Вам нужно использовать FluentAPI? Я пытаюсь найти способ здесь, предположим, что это не работает с EF7. – jpgrassi

+0

Комбинация атрибута 'ForeignKey' с методом' .HasForeignKey() ', похоже, не работает в EF7. – SkipHarris

0

Вы можете получите свойство сначала от modelBuilder.Entity<House>().Metadata.GetProperties(), а затем введите его имя

property.Relational().ColumnName = "YouCustomId" 
Смежные вопросы