我正在一个项目中,我们使用实体框架进行数据库事务。 在进行数据库事务时,如果特定表中有任何引用键,那么它将自动为该引用实体自动生成新字段,甚至不存在。
例如:
我有一个名为 Stations 的表,该表的引用为 StationTypes (一对一)。
现在,每当我们尝试在Stations表中创建/更新任何记录时,它 通过defaylt注入一个称为“ StationType_Id”的字段到特定 名为“ StationType_Id”的查询-甚至不存在并且最终出现在 引发波纹管错误。
Invalid column name 'StationTypes_Id'.
EF生成的示例数据库实体
public partial class Stations
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Stations()
{
this.OrganizationStations = new HashSet<OrganizationStations>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int StationTypeId { get; set; }
public int Status { get; set; }
public int CreatedBy { get; set; }
public System.DateTime CreatedDate { get; set; }
public Nullable<int> UpdatedBy { get; set; }
public Nullable<System.DateTime> UpdatedDate { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<OrganizationStations> OrganizationStations { get; set; }
public virtual StationTypes StationTypes { get; set; }
}
答案 0 :(得分:0)
这看起来实际上是多对一关系。一个站点有1个站点类型,但是许多站点可能具有相同的站点类型。
在这种情况下,可以预料到Station记录将具有StationTypeId列。您可能不希望在Station实体中公开StationTypeId属性,以便在EF 6中进行映射:
使用modelBuilder
modelBuilder.Entity<Station>
.HasRequired(x => x.StationType)
.WithMany()
.Map(x => x.MapKey("StationTypeId"));
一对一关系会使StationType表与Station表共享一个StationId PK。在这种情况下,Station会引用StationType,StationType会引用Station。然后,EF将通过PK将这些链接在一起:
modelBuilder.Entity<Station>
.HasRequired(x => x.StationType)
.WithRequired(x => x.Station);
可以设置FK与FK的关系,但是一个FK必须为空。