2013-06-18 4 views
1

У меня есть две таблицы базы данных:Entity Framework Code-First One-To-One Отношения

Клиенты

  • CustomerId (PK)
  • Имя
  • ...

CustomerSettings

  • CustomerId (PK)
  • Настройки1
  • Настройки2
  • ...

Можно ли иметь эти классы с использованием кода первой? Если да, то что такое плавное отображение?

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public int Name { get; set; } 
    public CustomerSetting CustomerSetting { get; set; } 
} 

public class CustomerSetting 
{ 
    public int CustomerId { get; set; } 
    public int Setting1 { get; set; } 
    public int Setting2 { get; set; } 
    public Customer Customer { get; set; } 
} 

Мне лично не нравятся таблицы один к одному. В конце концов, почему бы просто не добавить столбцы настроек в таблицу клиентов? К сожалению, это то, что мне нужно развивать против. Я не могу определить правильные сопоставления кода для такого сценария. Спасибо за вашу помощь.

+0

Один из возможных сценариев использования ПК с FK для анотера PK является собственностью. Хотя из coruse это не ваше дело. Я предложил решение в своем ответе. –

+0

Похоже, кто-то диктует модель данных. В этом случае сначала первая модель или Db - лучший выбор, чем первый код. – Maess

ответ

0

Если вы собираетесь использовать код в первую очередь и хотите иметь классы клиентов и клиентов, , но только одна таблица для обоих, как предлагает ваше сообщение, Я бы использовал сложные типы. увидеть хороший пример здесь:

http://weblogs.asp.net/manavi/archive/2010/12/11/entity-association-mapping-with-code-first-part-1-one-to-one-associations.aspx

Итак, ваша объектная модель должна выглядеть следующим образом (я не проверял):

public class Customer 
{ 
    public Customer() 
    { 
     CustomerSetting= new CustomerSetting(); 
    } 

    public int CustomerId { get; set; } 
    public int Name { get; set; } 
    public CustomerSetting CustomerSetting { get; set; } 
} 

[ComplexType] 
public class CustomerSetting 
{ 
    public int CustomerId { get; set; } 
    public int Setting1 { get; set; } 
    public int Setting2 { get; set; } 
    public Customer Customer { get; set; } 
} 
+0

Извините, мое сообщение предполагает наличие двух таблиц. В моей стороне говорится, что я бы не разработал мою базу данных, используя две таблицы, но, к сожалению, я не могу изменить существующую структуру двух таблиц. –

+0

В этом случае я согласен с @Maess, если у вас уже есть база данных, сначала первая модель - это путь, а не код. –

0

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

.Entity<Customer>() 
.HasOptional(c => c.CustomerSetting) 
.WithRequired(u => u.Customer); 
Смежные вопросы