【问题标题】:Use class property as value in Entity Framework Core Entity [duplicate]在实体框架核心实体中使用类属性作为值 [重复]
【发布时间】:2020-11-03 21:01:15
【问题描述】:

我想在我的 EF 实体中使用一个类并将属性的值保存到 DB。

我有一个这样的示例类:

public class MyClass
{
    public string MyProperty { get; set; }
}

还有一个像这样的实体框架实体:

public class MyEntity
{
    public MyClass Item { get; set; }
    ...
}

我的上下文是这样的:

public class MyDbContext : DbContext
{  
    public MyDbContext()
        : base(connectionStringName)
        {
        }

        public virtual DbSet<MyEntity> MyEntity { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<MyEntity>()
                        .Property(x => x.Item.MyProperty)
                        .HasColumnName("NewColumnName");
        }
    }
}

以上所有内容在 Entity Framework 6 中都有效,但相同的代码在 EF 核心中不起作用。

我在尝试创建迁移时收到以下错误:

表达式“x => x.Item.MyProperty”不是有效属性 表达。该表达式应该表示一个简单的属性访问: 't => t.MyProperty'。 (参数'propertyAccessExpression')

那么,我在 Entity Framework Core 中尝试做的事情是否可行,或者我是否坚持使用 EF6?

【问题讨论】:

  • MyEntityMyClass之间的关系是如何配置的?

标签: c# entity-framework entity-framework-core


【解决方案1】:

如果您尝试将列MyPropertyMyClass 更改,这意味着MyClass 是一个表。你为什么要从相关表中访问该属性MyEntity 请尝试以下代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<**MyClass**>()
        .Property(x => x.**MyProperty**)
        .HasColumnName("NewColumnName");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2017-01-14
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多