我有一个像这样的旧表:
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/