Конфликт с отношениями и внешним ключом 1-1 - PullRequest
0 голосов
/ 30 декабря 2011

Я пытаюсь сделать это отношение

 public class Company {
      public int Id { get; set; }

      public Configuration Configuration { get; set; }
 }

 public class Configuration {
      public int Id { get; set; }

      // public int CompanyId { get; set; } -> can't do this

      public Company Company { get; set; }
 }

 public class ConfigurationMapping : EntityTypeConfiguration<Configuration> {
      public ConfigurationMapping {
           HasRequired(configuration => configuration.Company)
                .WithOptional(company => company.Configuration)
                // .HasForeignKey(configuration => configuration.CompanyId) -> this doesn't exist
                .Map(f => f.MapKey("CompanyId")); // that's why I can't use the property above
      }
 }

Я не могу понять, как я могу добавить Configuration и установить IdCompany.Есть другой подход?Как я могу это сделать?

db.Configurations.Add(new Configuration {
    IdCompany = idCompany
});
db.SaveChanges();

1 Ответ

1 голос
/ 30 декабря 2011

Вы не можете. Отношение один-к-одному в настоящее время поддерживается, только если зависимый объект имеет FK для основного объекта в качестве своего первичного ключа. Это означает, что Configuration.Id - это PK Configuration, но также и FK до Company.Id.

Причина, по которой вы не можете использовать CompanyId, заключается в том, что база данных потребует от нее использования уникального индекса (иначе это будет не отношение один к одному, а один ко многим), а EF в настоящее время не поддерживает уникальные индексы. ,

Edit:

Извините. Теперь я лучше понимаю ваш вопрос. Если вы знаете идентификатор компании и хотите добавить новую конфигурацию, вы можете попробовать сделать что-то вроде этого:

var company = new Company { Id = companyId }; 
context.Companies.Attach(company);  // Existing company, EF know thinks it was loaded from DB

var configuration = new Configuration { Company = company }; // Create relation with existing company. It must not be related to other configuration!
context.Configurations.Add(configuration);
...