问题
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
回答1:
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");
});
}
回答2:
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"); });
来源:https://stackoverflow.com/questions/4939331/code-first-reference-one-to-many