C# 使用fluentAPI忽略实体属性([NotMapped])
我正在使用“实体框架反向POCO代码第一生成器”生成我的EF 6.1.3实体。我喜欢这个工具,因为它让我只需在生成器文件本身中配置几个属性,就可以轻松地自定义实体和上下文。但现在我遇到了一个问题。在我的一个SQL 2012表中,我有一列“SocialSecurity”,出于安全原因,该列被定义为varbinary。我想完全忽略生成器中的此列。我不希望此属性出现在生成的实体中,也不希望它出现在EntityTypeConfiguration派生的配置类中。我尝试在DbContext类的“InitializePartial()分部方法”和“ModelCreatingPartial()方法”中“忽略”此属性。但无论我做什么,属性SocialSecurity都会出现在实体类和Fluent API配置类中。有人能告诉我如何忽略此属性吗 这是我生成的实体配置类。为了简洁和公司代码隐私,我只想发布相关代码行。我还混淆了表名-抱歉C# 使用fluentAPI忽略实体属性([NotMapped]),c#,entity-framework-6,code-generation,dbcontext,C#,Entity Framework 6,Code Generation,Dbcontext,我正在使用“实体框架反向POCO代码第一生成器”生成我的EF 6.1.3实体。我喜欢这个工具,因为它让我只需在生成器文件本身中配置几个属性,就可以轻松地自定义实体和上下文。但现在我遇到了一个问题。在我的一个SQL 2012表中,我有一列“SocialSecurity”,出于安全原因,该列被定义为varbinary。我想完全忽略生成器中的此列。我不希望此属性出现在生成的实体中,也不希望它出现在EntityTypeConfiguration派生的配置类中。我尝试在DbContext类的“Initia
public partial class AAAAAAConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<AAAAAA>
{
public AAAAAAConfiguration(): this("dbo")
{
}
public AAAAAAConfiguration(string schema)
{
ToTable("AAAAAA", schema);
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName(@"ID").IsRequired().HasColumnType("bigint").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
Property(x => x.SocialSecurity).HasColumnName(@"SocialSecurity").IsOptional().HasColumnType("varbinary");
Property(x => x.Status).HasColumnName(@"Status").IsOptional().IsUnicode(false).HasColumnType("varchar").HasMaxLength(10);
Property(x => x.IsInactive).HasColumnName(@"IsInactive").IsRequired().HasColumnType("bit");
Property(x => x.CreatedById).HasColumnName(@"CreatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.CreatedDate).HasColumnName(@"CreatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.UpdatedById).HasColumnName(@"UpdatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.UpdatedDate).HasColumnName(@"UpdatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.TimeStamped).HasColumnName(@"TimeStamped").IsRequired().IsFixedLength().HasColumnType("timestamp").HasMaxLength(8).IsRowVersion().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed);
InitializePartial();
}
partial void InitializePartial();
}
以下是我生成的DbContext类:
public partial class BBBBBBDbContext : DataContext
{
public System.Data.Entity.DbSet<AAAAAA> AAAAAAs { get; set; } // AAAAAA
public System.Data.Entity.DbSet<AAAAAAAddress> AAAAAAAddresses { get; set; } // AAAAAAAddress
public BBBBBBDbContext()
: base("Name=BBBBBBDbContext")
{
System.Data.Entity.Database.SetInitializer<BBBBBBDbContext>(null);
InitializePartial();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
public bool IsSqlParameterNull(System.Data.SqlClient.SqlParameter param)
{
var sqlValue = param.SqlValue;
var nullableValue = sqlValue as System.Data.SqlTypes.INullable;
if (nullableValue != null)
return nullableValue.IsNull;
return (sqlValue == null || sqlValue == System.DBNull.Value);
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new AAAAAAConfiguration());
modelBuilder.Configurations.Add(new AAAAAAAddressConfiguration());
OnModelCreatingPartial(modelBuilder);
}
public static System.Data.Entity.DbModelBuilder CreateModel(System.Data.Entity.DbModelBuilder modelBuilder, string schema)
{
modelBuilder.Configurations.Add(new AAAAAAConfiguration(schema));
modelBuilder.Configurations.Add(new AAAAAAAddressConfiguration(schema));
return modelBuilder;
}
partial void InitializePartial();
partial void OnModelCreatingPartial(System.Data.Entity.DbModelBuilder modelBuilder);
}
最后,这里是我生成的配置文件。在这里,您仍然会注意到正在寻址和设置的属性SocialSecurity
public partial class AAAAAAConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<AAAAAA>
{
public AAAAAAConfiguration() : this("dbo")
{
}
public AAAAAAConfiguration(string schema)
{
ToTable("AAAAAA", schema);
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName(@"ID").IsRequired().HasColumnType("bigint").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
Property(x => x.SocialSecurity).HasColumnName(@"SocialSecurity").IsOptional().HasColumnType("varbinary");
Property(x => x.Status).HasColumnName(@"Status").IsOptional().IsUnicode(false).HasColumnType("varchar").HasMaxLength(10);
Property(x => x.IsInactive).HasColumnName(@"IsInactive").IsRequired().HasColumnType("bit");
Property(x => x.CreatedById).HasColumnName(@"CreatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.CreatedDate).HasColumnName(@"CreatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.UpdatedById).HasColumnName(@"UpdatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.UpdatedDate).HasColumnName(@"UpdatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.TimeStamped).HasColumnName(@"TimeStamped").IsRequired().IsFixedLength().HasColumnType("timestamp").HasMaxLength(8).IsRowVersion().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed);
InitializePartial();
}
partial void InitializePartial();
}
公共部分类AAAAA配置:System.Data.Entity.ModelConfiguration.EntityTypeConfiguration
{
公共aaaaconfiguration():此(“dbo”)
{
}
公共AAAAA配置(字符串架构)
{
ToTable(“AAAAA”,模式);
HasKey(x=>x.Id);
属性(x=>x.Id).HasColumnName(@“Id”).IsRequired().HasColumnType(“bigint”).HasDatabaseGenerateOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGenerateOption.Identity);
属性(x=>x.SocialSecurity).HasColumnName(@“SocialSecurity”).IsOptional().HasColumnType(“varbinary”);
属性(x=>x.Status).HasColumnName(@“Status”).IsOptional().IsUnicode(false).HasColumnType(“varchar”).HasMaxLength(10);
属性(x=>x.IsInactive).HasColumnName(@“IsInactive”).IsRequired().HasColumnType(“位”);
属性(x=>x.CreatedById).HasColumnName(@“CreatedById”).IsRequired().HasColumnType(“bigint”);
属性(x=>x.CreatedDate).HasColumnName(@“CreatedDate”).IsRequired().HasColumnType(“日期时间”);
属性(x=>x.UpdatedById).HasColumnName(@“UpdatedById”).IsRequired().HasColumnType(“bigint”);
属性(x=>x.UpdateDate).HasColumnName(@“UpdateDate”).IsRequired().HasColumnType(“日期时间”);
属性(x=>x.timestamp).HasColumnName(@“timestamp”).IsRequired().IsFixedLength().HasColumnType(“timestamp”).HasMaxLength(8.IsRowVersion().HasDatabaseGenerateOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGenerateOption.Computed);
初始化部分();
}
部分无效初始化部分();
}
那么,如何使生成器完全忽略此列以显示在实体或配置中的任何位置。如果这太困难,还有什么替代方法。我当然不想修改生成的类,因为每次运行生成器时它们都会被生成器替换。代码优先生成器的想法不是吗它是否会创建一次模型,然后您首先继续使用代码?嗯,它是从现有数据库中首先使用代码。因为我必须使用现有数据库,所以我必须找到解决此问题的方法。这并不意味着您应该始终从数据库生成模型。这意味着您修改了数据库和类模型a确实如此。毫无疑问,您将获得越来越多的自定义项,您不希望这些自定义项被新的代码生成冲走。事实上,第一次修改通常在代码生成后立即开始(例如删除您不想要的导航属性、重命名生成的属性,您可以随意命名)。
public partial class BBBBBBDbContext
{
partial void OnModelCreatingPartial( DbModelBuilder modelBuilder )
{
modelBuilder.Entity<AAAAAA>().Ignore( x => x.SocialSecurity );
}
}
public partial class AAAAAA : EntityBase
{
public long Id { get; set; } // ID (Primary key)
public byte[] SocialSecurity { get; set; } // SocialSecurity
public string Status { get; set; } // Status (length: 10)
public bool IsInactive { get; set; } // IsInactive
public long CreatedById { get; set; } // CreatedByID
public System.DateTime CreatedDate { get; set; } // CreatedDate
public long UpdatedById { get; set; } // UpdatedByID
public System.DateTime UpdatedDate { get; set; } // UpdatedDate
public byte[] TimeStamped { get; set; } // TimeStamped (length: 8)
public AAAAAA()
{
IsInactive = false;
CreatedById = 0;
CreatedDate = System.DateTime.Now;
UpdatedById = 0;
UpdatedDate = System.DateTime.Now;
InitializePartial();
}
partial void InitializePartial();
}
public partial class AAAAAAConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<AAAAAA>
{
public AAAAAAConfiguration() : this("dbo")
{
}
public AAAAAAConfiguration(string schema)
{
ToTable("AAAAAA", schema);
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName(@"ID").IsRequired().HasColumnType("bigint").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);
Property(x => x.SocialSecurity).HasColumnName(@"SocialSecurity").IsOptional().HasColumnType("varbinary");
Property(x => x.Status).HasColumnName(@"Status").IsOptional().IsUnicode(false).HasColumnType("varchar").HasMaxLength(10);
Property(x => x.IsInactive).HasColumnName(@"IsInactive").IsRequired().HasColumnType("bit");
Property(x => x.CreatedById).HasColumnName(@"CreatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.CreatedDate).HasColumnName(@"CreatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.UpdatedById).HasColumnName(@"UpdatedByID").IsRequired().HasColumnType("bigint");
Property(x => x.UpdatedDate).HasColumnName(@"UpdatedDate").IsRequired().HasColumnType("datetime");
Property(x => x.TimeStamped).HasColumnName(@"TimeStamped").IsRequired().IsFixedLength().HasColumnType("timestamp").HasMaxLength(8).IsRowVersion().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed);
InitializePartial();
}
partial void InitializePartial();
}