我有两个看起来像这样的模型:
[Table("Titles")]
public partial class Title
{
[Key]
[Column("TitleId")]
public virtual string Genre { get; set; }
[ForeignKey("Genre")] // I want to link using the Genre field
public virtual Genre GenreInfo { get; set; }
}
[Table("Genres")]
public partial class Genre
{
[Key]
[Column("GenreID")]
public int GenreID { get; set; } *** This is the actual PK in the table
public string Genre { get; set; } // This contains unique genre code.
public string Keywords { get; set; }
}
标题表中的foreignKey是字段“Genre”而不是GenreId。如何在Title模型中定义使用Genre字段加载类型infor的关系?
这是多对一的关系。 (标题只能有一种类型)
答案 0 :(得分:1)
你能试试这个......?
public partial class Title
{
public virtual string Genre { get; set; }
public virtual Genre GenreInfo { get; set; }
}
public partial class Genre
{
public int GenreID { get; set; }
public string sGenre { get; set; } // This contains unique genre code.
public string Keywords { get; set; }
}
和DbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Title>()
.HasOptional(b => b.GenreInfo)
.WithRequired().Map(x => x.MapKey("sGenre"));
}
答案 1 :(得分:0)
我不会那样对这些类进行建模。我这样做:
public class Title
{
public int Id //or TitleId if you prefer
public int GenreId { get; set; }
public virtual Genre Genre { get; set; }
}
public class Genre
{
public int Id { get; set; } //or GenreId if you prefer
["Required"]
public string Name{ get; set; }
public string Keywords { get; set; }
}
定义关系不需要数据注释或流畅的API,因为一切都遵循惯例
您无需更新标题表中的外键即可更改流派的名称
连接外键的表,这是一个int而不是字符串 - 所以可能更有效率
现在你必须确保Name是唯一的。我这样做是为自然键添加索引并在DbContext
中使用ValidateEntity
进行验证。有关here