我正在尝试将现有数据层转换为EF,作为我公司用它开始一个新项目的概念证明。我遇到了一个类的问题,因为它映射到两个表。我也试图使用Fluent API进行验证,以保持清洁。
我在这里做了几次搜索,找不到任何答案。
这是我到目前为止的配置文件。任何有关更好的做事方式的见解也将受到赞赏。
internal class StoreConfiguration : EntityTypeConfiguration<Store>{
public StoreConfiguration() {
Map(m => {
m.ToTable("tblStore");
m.HasKey(s => s.ID);
m.Property(s => s.ID).HasColumnName("strID");
m.Property(s => s.SiteID).HasColumnName("strSiteID");
m.Property(s => s.StoreStatusID).HasColumnName("strStatusID");
m.Property(s => s.Number).HasColumnName("strNumber").IsRequired();
m.Property(s => s.Caption).HasColumnName("strCaption").IsRequired().HasMaxLength(80);
m.Property(s => s.Notes).HasColumnName("strNotes");
m.Property(s => s.LandlordName).HasColumnName("strLandlordName").HasMaxLength(80);
m.Property(s => s.IsDeleted).HasColumnName("strIsDeleted");
m.Property(s => s.CreatedBy).HasColumnName("strCreatedBy").HasMaxLength(64);
m.Property(s => s.CreatedOn).HasColumnName("strCreatedOn");
m.Property(s => s.ModifiedBy).HasColumnName("strModifiedBy").HasMaxLength(64);
m.Property(s => s.ModifiedOn).HasColumnName("strModifiedOn");
m.Property(s => s.DeletedBy).HasColumnName("strDeletedBy").HasMaxLength(64);
m.Property(s => s.DeletedOn).HasColumnName("strDeletedOn");
}).Map(m => {
m.ToTable("tblIPLocation");
m.Property(s => s.Number).HasColumnName("LD_STORE#");
m.Property(s => s.District).HasColumnName("LD_DIST#");
m.Property(s => s.DMName).HasColumnName("LD_DMGR");
m.Property(s => s.Region).HasColumnName("LD_REG#");
m.Property(s => s.RMName).HasColumnName("LD_RMGR");
});
}
}
现在,我在所有.IsRequired()
,.HasMaxLength()
和.HasKey()
上都收到错误,因为它们不是lambda对象的属性。当我没有将m.
用于所有这些属性,ToTable和HasKey时,它工作正常。我只是错过演员?
答案 0 :(得分:0)
我认为这是在&#34;不良做法&#34;从最开始。第二个表中的详细信息是由我们无法控制的另一个系统提供的数据,所以说实话,它应该是一个单独的类。
我确实找到了this link,它描述了实现这一目标的两种方法。由于ID不匹配,唯一的选择是使用View。但是,由于我只是在构建一个概念证明,我只是为此创建一个单独的类。
如果在较新版本的Entity Framework中有其他方法可以执行此操作,请告诉我们。我只是不想让这个问题得不到回答,以防其他人偶然发现它。