2014-06-29 5 views
2

J'ai le modèle C# suivant lorsqu'une société existe dans un fuseau horaire donné.Entity Framework Code Première option multiple avec mappage fluide

[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; } 

} 

Dans ma base de données SQL pré-existante, la table est une table TimeZone de recherche conçu pour être référencé par la table de l'entreprise et tout ce qui a besoin d'un TimeZone. Pour cette raison, la clé étrangère dans la relation un à plusieurs est dans l'entreprise.

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) 

Comment puis-je la carte son en utilisant l'EF API Courant (Im en utilisant EF 6) pour que je puisse Company.TimeZone.Name?

+2

Vous utilisez l'API couramment? Ressemble à des annotations de données. –

+0

J'utilise un peu des deux. Je pense que EF me permet de faire ça ok ... –

+0

Oui, ça le fait. Juste vérifier pour vous assurer que vous obtenez les réponses que vous attendez. :) –

Répondre

2

Essayez quelque chose comme ceci:

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

Merci @AppDeveloper - Y at-il un moyen d'éviter la propriété TimeZoneId sur le type de société? –

0

Vous devez déclarer la propriété TimeZone comme virtuelle pour le chargement paresseux, comme ceci:

[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; } 

} 
Questions connexes