Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用fluentAPI忽略实体属性([NotMapped])_C#_Entity Framework 6_Code Generation_Dbcontext - Fatal编程技术网

C# 使用fluentAPI忽略实体属性([NotMapped])

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

我正在使用“实体框架反向POCO代码第一生成器”生成我的EF 6.1.3实体。我喜欢这个工具,因为它让我只需在生成器文件本身中配置几个属性,就可以轻松地自定义实体和上下文。但现在我遇到了一个问题。在我的一个SQL 2012表中,我有一列“SocialSecurity”,出于安全原因,该列被定义为varbinary。我想完全忽略生成器中的此列。我不希望此属性出现在生成的实体中,也不希望它出现在EntityTypeConfiguration派生的配置类中。我尝试在DbContext类的“InitializePartial()分部方法”和“ModelCreatingPartial()方法”中“忽略”此属性。但无论我做什么,属性SocialSecurity都会出现在实体类和Fluent API配置类中。有人能告诉我如何忽略此属性吗

这是我生成的实体配置类。为了简洁和公司代码隐私,我只想发布相关代码行。我还混淆了表名-抱歉

    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();
}