2014-06-29 70 views
2

我有以下C#模型,其中公司存在於給定的TimeZone中。實體框架代碼第一個到多個可選的流利映射

[Table("Company")] 
public class Company 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(255)] 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    public TimeZone TimeZone { get; set; } 

} 

[Table("TimeZone")] 
public class TimeZone 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(255)] 
    public string Name { get; set; } 

} 

在我的預先存在的SQL數據庫時區表的設計是由公司表,其他任何需要一個TimeZone引用查找表。出於這個原因,一對多關係中的外鍵在公司裏。

CREATE TABLE [dbo].[Company](
[Id]   [int] IDENTITY(1,1)  NOT NULL, 
[Name]   [nvarchar](500)   NOT NULL, 
[TimeZoneId] [int]     NOT NULL REFERENCES dbo.TimeZone(Id)) 

CREATE TABLE [dbo].TimeZone(
[Id]   [int] IDENTITY(1,1)  NOT NULL, 
[Name]   [nvarchar](500)   NOT NULL) 

如何映射他使用EF Fluent API(使用EF 6的Im)以便我可以Company.TimeZone.Name?

+2

是否使用流利的API?看起來像數據註釋。 –

+0

我正在使用這兩個。我認爲英孚允許我這樣做... –

+0

是的,它的確如此。只是檢查一下,以確保你得到你所期望的答案。 :) –

回答

2

嘗試是這樣的:

public class CompanyContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder builder) 
    { 
     builder.Entity<Company>() 
      .HasRequired(c => c.TimeZone) 
      .WithMany() 
      .HasForeignKey(c => c.TimeZoneId); 

     base.OnModelCreating(builder); 
    } 

} 

[Table("Company")] 
public class Company 
{ 
    [Key] 
    public int Id { get; set; } 

    public int TimeZoneId { get; set; } 

    [StringLength(255)] 
    [Required] 
    public string Name { get; set; } 

    // this will be navigation property 
    public TimeZone TimeZone { get; set; } 

} 

[Table("TimeZone")] 
public class TimeZone 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(255)] 
    public string Name { get; set; } 

} 
+0

感謝@AppDeveloper - 有沒有辦法避免公司類型的TimeZoneId屬性? –

0

您需要申報財產時區作爲虛擬的延遲加載,這樣的:

[Table("Company")] 
public class Company 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(255)] 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    public virtual TimeZone TimeZone { get; set; } 

} 

[Table("TimeZone")] 
public class TimeZone 
{ 
    [Key] 
    public int Id { get; set; } 

    [StringLength(255)] 
    public string Name { get; set; } 

} 
相關問題