0

我試圖做到這一點關係的衝突關係和外鍵1-1

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

你不能。一對一關係目前僅在從屬實體具有以主體實體作爲其主鍵的FK時才被支持。這意味着Configuration.IdConfiguration的PK,但也是FK到Company.Id

你不能使用CompanyId的原因是數據庫要求它使用唯一索引(否則它不會是一對一關係,而是一對多),EF目前不支持唯一索引。

編輯:

對不起。現在我更好地理解你的問題。如果您知道公司的ID,並且想要添加新配置,則可以嘗試執行以下操作:

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); 
+0

瞭解,但是如何才能爲公司設置值?我必須檢索公司並設置配置。公司=公司? – 2011-12-30 14:16:05

+0

我加了一些例子。它適用於一對多的場景,沒有任何問題,所以我希望它也可以一對一地工作。 – 2011-12-30 14:34:47