首先将sql视图映射到实体框架代码中已经定义的多个实体
本文关键字:实体 定义 代码 框架 sql 视图 映射 | 更新日期: 2023-09-27 18:14:47
我使用代码第一方法流畅的API映射sql表到实体如下:
public class ProjectEntities : DbContext
{
public ProjectEntities ()
: base("name=ProjectEntities ")
{
}
public DbSet<UserEntity> UserEntity { get; set; }
public DbSet<AddressEntity> AddressEntity { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserEntityMapper());
modelBuilder.Configurations.Add(new AddressEntityMapper());
}
}
和映射器声明为:
public class AddressEntityMapper : EntityTypeConfiguration<AddressEntity>
{
public AddressEntityMapper()
{
ToTable("Address");
HasKey(m => m.AddressID);
HasRequired(m => m.UserEntity).WithMany(b => b.AddressEntity);
Property(p => p.AddressKey).HasColumnName("ADDRESSID");
Property(p => p.UserID).HasColumnName("User_id");
Property(p => p.Address1).HasColumnName("ADDRESS1");
Property(p => p.Address2).HasColumnName("ADDRESS2");
Property(p => p.Address3).HasColumnName("ADDRESS3");
Property(p => p.City).HasColumnName("CITY");
Property(p => p.State).HasColumnName("STATE");
Property(p => p.ZipCode).HasColumnName("ZIPCODE");
}
}
和User mapper:
public class UserEntityMapper : EntityTypeConfiguration<UserEntity>
{
public UserEntityMapper()
{
ToTable("User");
HasKey(m => m.UserID);
Property(p => p.UserID).HasColumnName("UserID");
Property(p => p.FirstName).HasColumnName("FIRSTNAME");
Property(p => p.LastName).HasColumnName("LAST_NAME");
Property(p => p.MiddleInitial).HasColumnName("MIDDLEINITIAL");
}
}
这个东西很好。现在我们必须改变逻辑来获取信息。现在公司决定对完整的用户信息使用sql视图,这样您就可以在一个地方获得用户的所有信息。现在我不想重做/创建另一个映射器映射所有字段的表格,这是来自sql视图。
我的问题是我们是否可以声明另一个映射器来映射这两个映射器
public class UserFullEntityMapper : EntityTypeConfiguration<UserEntity, AddressEntity>
{
public UserFullEntityMapper()
{
ToTable("vw_user");
///Declare the auto mapping here to the fields from above entities to columns retuned from sql view.
}
}
请建议。由于
你应该为你的视图定义一个新的实体:
public class YourViewName
{
// properties from UserEntity
// properties from AddressEntity
}
并使用以下映射:
public View_mapping:EntityTypeConfiguration<YourViewName>
{
public View_mapping()
{
ToTable("vw_user");
// other mappings
}
}