我有一个像这样的旧表:

Country
- countryCode (PK, varchar(10), not null)

现在我有一个新表:
Store
- store_id
- country_code

我的模型:
public class Country
{
   [Key]
   [Column("countryCode")
   public int CountryCode {get;set;}
}


public class Store
{
   [Key]
   [Column("store_id")
   public int Id {get;set;}

   [Column("country_code")]
   public int CountryCode {get;set;}
}

现在我希望能够做到这一点:
var store = // get store

store.Country.CountryCode

如何创建此映射? 请注意,列名不同(我无法更改)。

我相信我必须将它添加到我的 Store 模型中,但是我如何指定外键的外观,因为它们具有不同的名称?
public virtual CountryCode {get;set;}

最佳答案

如果您的数据库列具有 varchar(10) 类型,则您不能在模型中使用 int 属性,但必须使用 string ,无论属性名称是否与列名称匹配。此外,为了能够从 Country 访问 Store ,您需要一个导航属性 Store.Country :

public class Country
{
    [Key]
    [Column("countryCode", TypeName = "varchar")]
    [MaxLength(10)]
    public string CountryCode { get; set; }
}

public class Store
{
    [Key]
    [Column("store_id")
    public int Id { get; set; }

    [Column("country_code", TypeName = "varchar")]
    [MaxLength(10)]
    [Required]
    [ForeignKey("Country")]
    public string CountryCode { get; set; }

    public virtual Country Country { get; set; }
}

(可能 ForeignKey 属性不是必需的。您可以尝试不使用它。如果表 [Required] 中的 country_code 列允许 Store 值,也可以删除 NULL 属性。)

您现在应该能够访问 CountryCode 例如:
var store = context.Stores.Find(1);
string countryCode = store.Country.CountryCode;
store.Country 导航属性将在您访问该属性时通过延迟加载(因此使用 virtual 修饰符)自动加载。

关于c# - 外键列名不同时的 Entity Framework 映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16220216/

10-13 06:44