【问题标题】:Entity Framework Code First - How to ignore a column when saving实体框架代码优先 - 保存时如何忽略列
【发布时间】:2013-04-05 08:46:39
【问题描述】:

我有一个名为 Client 的类首先使用实体​​框架代码映射到数据库表。该表有一个计算字段,我需要在我的 Client 类中可用,但我知道无法写入该字段。有没有办法配置实体框架在保存时忽略该属性,但在读取时包含该属性?

我曾尝试在我的配置类中使用 Ignore 方法,或使用 [NotMapped] 属性,但这些会阻止从数据库中读取该属性。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4.1 entity-framework-5


    【解决方案1】:

    您可以将DatabaseGeneratedAttributeDatabaseGeneratedOption.Computed 选项一起使用:

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public ComputedPropertyType ComputedProperty { get; set; }
    

    或者,如果您更喜欢流畅的 api,您可以在 DbContext 类中使用 HasDatabaseGeneratedOption 方法:

    public class EntitiesContext : DbContext
    {
        public DbSet<EntityType> Enities { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<EntityType>().Property(e => e.ComputedProperty).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
        }
    }
    

    【讨论】:

    • 谢谢,这似乎是答案。但是,由于我使用我的计算属性作为对另一个表的外键引用,我现在得到“ReferentialConstraint 中的依赖属性被映射到存储生成的列”。是否不再可能将其用作外键引用?
    • @EasyTimer 老实说,我很难想象这样的场景。从 EF 的角度来看,这是不可能的,因为如果您更改应用程序中的引用,EF 需要能够更新外键。也许在你的情况下(因为我不知道你的确切要求)只有导航属性就足够了,看看这里:stackoverflow.com/questions/5691780/…
    • 我已经解决了我的问题,方法是将我的类分成两个,如本文weblogs.asp.net/manavi/archive/2011/04/24/… 我有一个包含计算字段的类和另一个包含我需要能够编辑的任何字段的类.
    【解决方案2】:

    将属性标记为已计算:

    modelBuilder
        .Entity<MyEntityType>()
        .Property(_ => _.MyProperty)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
    

    【讨论】:

    • 谢谢,这似乎是答案。但是,由于我使用我的计算属性作为对另一个表的外键引用,我现在得到“ReferentialConstraint 中的依赖属性被映射到存储生成的列”。是否不再可以将其用作外键引用?
    • @EasyTimer:计算属性作为外键?我的天啊。如果计算结果与主键表中的任何主键值都不匹配,你会怎么做?
    • 我意识到这是一个不寻常且不理想的场景。碰巧,主键表本身就是一个视图,其主键的计算方式与外键表相同,并且不太可能存在任何差异。这都是将新代码引入遗留系统的一部分,我的双手被束缚了。
    猜你喜欢
    • 2015-08-19
    • 2012-02-12
    • 2012-05-18
    • 1970-01-01
    • 2012-06-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多