6

I have the following two tables:

LOCALIZATION

Id                     int
Text                   string

DINER

Id                     int
Name                   string
Description            string
Name_LocalizationID    int
Description_LocationID int

Now I want my POCO like this:

public class Diner{
   public int Id{get;set;}
   public ICollection<Localization> NameLocalization{get;set;}
   public ICollection<Localization> DescriptionLocalization{get;set;} 
}

public class Localization{
   public int Id{get;set;}
   public string Text{get;set;}
}

Question is: How we can map NameLocalization and DescriptionLocalization property to Localization's Id with EF Fluent API? Thanks

sadhat75
  • 191
  • 4
  • 9

2 Answers2

3

SQL Server does not support multiple cascade deletes, so you need to make one of your associations optional in order to derive a SQL Server schema from your object model:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Diner>()
        .HasRequired(diner => diner.NameLocalization)
        .WithMany()
        .IsIndependent()
        .Map(s => 
        { 
            s.MapKey(localization => localization.Id, "NameLocalizationID"); 
        });

    modelBuilder.Entity<Diner>()
        .HasOptional(diner => diner.DescriptionLocalization)
        .WithMany()
        .IsIndependent()
        .Map(s => 
        { 
            s.MapKey(localization => localization.Id, "DescriptionLocationID"); 
        });
}
Morteza Manavi
  • 33,026
  • 6
  • 100
  • 83
0

I've not tested this code, I'm afraid, but maybe something like:

modelBuilder.Entity<Diner>()
    .HasRequired(diner => diner.NameLocalization)
    .WithMany().IsIndependent()
    .Map(s => { s.MapKey(localization => localization.Id, "Name_LocalizationID"); });

modelBuilder.Entity<Diner>()
    .HasRequired(diner => diner.DescriptionLocalization)
    .WithMany().IsIndependent()
    .Map(s => { s.MapKey(localization => localization.Id, "Description_LocationID"); });
dommer
  • 19,610
  • 14
  • 75
  • 137
  • I am sorry I gave wrong Diner navigations. when I ran the code above, it returned many records so I think I need to change one:one to one:many mapping. So my Diner class will look like this : public class Diner{ public int Id{get;set;} public ICollection NameLocalization{get;set;} public ICollection DescriptionLocalization{get;set;} } Could you please tell how I map this using Fluent or Data Annotation? – sadhat75 Feb 09 '11 at 15:57