【问题标题】:Mapping properties to (differently named) foreign key fields in Entity Framework CTP5将属性映射到实体框架 CTP5 中的(不同名称的)外键字段
【发布时间】:2010-12-09 13:13:43
【问题描述】:

我正在尝试使用实体框架 CTP5 Fluent API 来映射现有数据库。我有以下课程:

public class Shop
{
    public long Id
    {
        get;
        set;
    }
}

public class Sale
{
    public long Id
    {
        get;
        set;
    }

    public virtual Shop Shop
    {
        get;
        set;
    }
}

相应的表称为“Stores”和“Sales”。 Sales 有一个 StoreId 外键,它指向 Stores 表中的 Id 字段。

我正在努力将 Sale.Shop.Id 映射到表中的 StoreId。我不能随意将其更改为 ShopId,因此需要对其进行映射。

在 CTP4 中,我使用的是:

modelBuilder.Entity<Sale>().MapSingleType(x =>
    new
    {
        Id = x.Id,
        StoreId = x.Shop.Id
    });

我尝试了以下方法:

modelBuilder.Entity<Sale>().Property(x => x.Shop.Id).HasColumnName("StoreId");

但是,这似乎只适用于原始类型。

如何指定此映射?

【问题讨论】:

    标签: entity-framework map foreign-keys fluent-interface entity-framework-ctp5


    【解决方案1】:

    更新:我在下面添加了 EF 4.1 候选版本的修订版

    经过一番寻找,我找到了适合我的答案:

    EF4.1 RC版:

    modelBuilder.Entity<Booking>().HasRequired(b => b.Booker)
        .WithMany(m => m.BookedSlots).Map(p=>{
                        p.MapKey("BookerID");
        });
    

    在你的情况下:

    modelBuilder.Entity<Sale>().HasRequired(sale => sale.Shop)
        .WithMany().Map(s=> {
               s.MapKey("StoreId");
        });
    

    我的版本略有不同,因为我在关系的两边都有导航属性。

    【讨论】:

    • 谢谢@PatrickDesjardins,看起来我在您发表评论后删除了 IsIndependent 的使用
    【解决方案2】:

    我认为解决此问题的最佳方法是将您的独立关联升级为外键关联,这意味着不是隐藏外键ShopId,实际上将它包含在Sale 类中。然后,您可以使用 Data Aannotations/Fluent API 更改其列名以匹配您现有的架构:

    public class Shop
    {
        public long Id { get;set; }
    }
    
    public class Sale
    {
        public long Id { get; set; }
    
        [Column(Name="StoreID")]
        public long ShopId { get; set; }
    
        public virtual Shop Shop { get; set; }
    }
    


    这导致所需的数据库架构:

    【讨论】:

      【解决方案3】:

      我认为您正在寻找的是 RelatedTo 属性。更多信息在this ADO.NET team blog post

      【讨论】:

      • RelatedTo 属性在 CTP4 中声明,在 CTP5 中被删除。所以这不再是一个选择。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多