我已经搜索了已经回答的问题,但没有找到我的问题的答案。真为我感到羞耻。
我有这样的情况:
public class Content
{
[Key]
[StringLength(36, ErrorMessage="Must have 36 characters")]
[Required(ErrorMessage="Must have a unique GUID")]
public string GUID { get; set; }
public virtual ICollection<RegionalInfo> RegionalInfo { get; set; }
}
public class RegionalInfo
{
[Key]
public virtual Content Content { get; set; }
[Key]
public virtual Region Region { get; set; }
}
public class Region
{
[Key]
[StringLength(5, ErrorMessage="ID must have 5 characters")]
[Required]
[RegularExpression(@"[a-z]{2}-[A-Z]{2}", ErrorMessage = "ID must be in ISO 639 standard")]
public string ID { get; set; }
public string Country { get; set; }
public string Language { get; set; }
}但我不能让它起作用。EF说"RegionalInfo没有定义键“。
简而言之,我试图在这个类"RegionalInfo“上创建一个组合键,其中包括Content.GUID和Region.ID。
对于Contents表中的每个唯一内容,RegionalInfo表中将存在许多“翻译”。
发布于 2011-09-01 04:57:13
我假设您使用的是DbContext。在这种假设下,您应该在RegionalInfo类中定义键,如下所示
public class RegionalInfo
{
[Key]
public String ContentId { get; set; }
public virtual Content Content { get; set; }
[Key]
public string RegionId { get; set; }
public virtual Region Region { get; set; }
}在您的context类中,您可以执行以下操作:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
// Composite key definition
modelBuilder.Entity<RegionalInfo>().HasKey(x => new { x.ContentId, x.RegionId });
// And if I remember correctly this was required in order to do
// var x = contentObject.RegionalInfo.Where(....) stuff
modelBuilder.Entity<RegionalInfo>().HasRequired<Content>(x => x.Content).WithMany(x => x.RegionalInfo).HasForeignKey(x => x.ContentId);
}这应该会起作用。
https://stackoverflow.com/questions/7261157
复制相似问题