首先将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.
}
}

请建议。由于

首先将sql视图映射到实体框架代码中已经定义的多个实体

你应该为你的视图定义一个新的实体:

public class YourViewName
{ 
   // properties from UserEntity
   // properties from AddressEntity
}

并使用以下映射:

public View_mapping:EntityTypeConfiguration<YourViewName>
{
   public View_mapping()
   {
      ToTable("vw_user");
      // other mappings
   }
}