首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在创建记录时,使用EF / EF Core 2向SQL表中的新列添加带有Id的前缀

在创建记录时,使用EF / EF Core 2向SQL表中的新列添加带有Id的前缀
EN

Stack Overflow用户
提问于 2018-03-06 21:02:14
回答 1查看 516关注 0票数 1

我有下面的模型

代码语言:javascript
运行
复制
public class Student
{
    public int Id { get; set; }

    private string reference;

    public string Reference
    {
        get
        {
            return this.reference;
        }
        set
        {
            this.reference = "ST" + Id;
        }
    }
}

我正在尝试写到数据库引用列,如

代码语言:javascript
运行
复制
Id - Reference
1   - ST1
2   - ST2

我的上下文类具有以下配置

代码语言:javascript
运行
复制
public class SchoolContext : DbContext
{
    public DbSet<Student> Student { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
        .Property(b => b.Id)            
        .ValueGeneratedOnAdd();

        modelBuilder.Entity<Student>()
        .Property(b => b.Reference)
        .HasComputedColumnSql("[Id]")
        .ValueGeneratedOnAdd();
    }
}

但我没有得到我想要的。请记住,我不想在sql server中生成

EN

Stack Overflow用户

发布于 2018-03-08 09:43:31

好吧,让我们看看:

  1. Id是标识和自动增量。
  2. 您需要用"ST“+ Id填充列引用,始终
  3. 您不希望在SQL server端执行任何操作
  4. 你在使用EF核心

事实:

  1. HasComputedColumnSql和ValueGeneratedOnAdd与填充列引用的方式无关
  2. 列Id是不确定的,直到在表中实际写入行为止。
  3. 列引用不是计算列类型,因为它实际上包含应用程序在其中写入的实际数据,即使它始终是"ST“+ Id。

与EF的解决方案:

  1. 将行添加到实体中
  2. 保存更改
  3. 使用这样的直接赋值来修改同一行的列引用: student.Reference = "ST“+ student.Id.ToString();
  4. 并再次保存更改

或者,你可以考虑:

  1. 将引用列设为Server端的计算列
  2. 或者使引用属性只存在于上面的类定义中,而不使用setter。在我看来,没有必要把它放在实际的桌子上。

对不起,这可能不能完全解决您的问题,因为您的限制和限制。

祝你好运!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49139879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档