【问题标题】:Code-First Reference one-to-many代码优先引用一对多
【发布时间】:2011-02-08 22:37:04
【问题描述】:

我有以下两张表:

本地化

Id                     int
Text                   string

晚餐

Id                     int
Name                   string
Description            string
Name_LocalizationID    int
Description_LocationID int

现在我想要这样的 POCO:

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

问题是:我们如何使用 EF Fluent API 将 NameLocalization 和 DescriptionLocalization 属性映射到 Localization 的 Id? 谢谢

【问题讨论】:

    标签: entity-framework entity code-first fluent-interface


    【解决方案1】:

    SQL Server 不支持多个级联删除,因此您需要创建一个关联可选,以便从您的对象模型派生 SQL Server 架构:

    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】:

      恐怕我还没有测试过这段代码,但可能是这样的:

      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"); });
      

      【讨论】:

      • 很抱歉我提供了错误的餐厅导航。当我运行上面的代码时,它返回了许多记录,所以我想我需要将 one:one 更改为 one:many 映射。所以我的 Diner 课程将如下所示: public class Diner{ public int Id{get;set;} public ICollection NameLocalization{get;set;} public ICollection DescriptionLocalization{get;set;} } 你能不能告诉我如何使用 Fluent 或 Data Annotation 进行映射?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多