【问题标题】:Enity Framework Core Mapping issue实体框架核心映射问题
【发布时间】:2017-02-23 06:52:30
【问题描述】:

我遇到了实体框架中的映射问题。最初我的模型就像

public class Model1 
{
  public string[] Fields
  { get; set; }
}

这样保存在 db 中的数据就像 ["data1","data2"]。现在根据新要求,我的模型更改如下

public class Model1 
{
 public Model2[] Fields
        {
            get;
            set;
        }
}

public class Model2 
{
public string prop1 {get;set;}
public string prop2 {get;set;}
}

对于新的实施,新的保存工作正常。但是对于现有记录,同时获取数据获取类型转换问题。

无法将字符串数组转换为 model2 数组。

我该如何解决这个问题?

【问题讨论】:

  • 代码优先可能无法实现,我认为您需要先将旧数据迁移到数据库级别的新架构中
  • 感谢您的回复。但是,这已经在生产中,因此我无法对所有数据库进行更改。仅期待代码端解决方案。
  • 您的新型号已经投入生产了吗?您可以在生产环境中运行 ef 迁移吗?
  • 我将数据作为 JSON 存储在数据库中的单个列中。我的问题只是映射与数据库架构无关。

标签: c# entity-framework-core


【解决方案1】:

好的。您需要为 Model1 保留相同的实体,但只需添加 getter:

public class Model1 
{
  public string[] Fields { get; set; }

  public string prop1 { get { return Field[0]; } }
  public string prop2 { get { return Field[1]; } }
}

然后,您可以创建一个仅用于迁移目的的方法,在该方法中获取所有 Model1 数据,将它们转换为 Model2 并保存它们。它看起来像:

using (var context = new YourContext())
{
    foreach( var model1 in context.SetModel1 )
    {
        context.SetModel2.Add(
            new Model2() { prop1 = model1.prop1, prop2 = model1.prop2 }
        );
    }
    context.SaveChanges();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2016-11-27
    • 2017-06-30
    • 1970-01-01
    • 2021-09-01
    • 2011-05-29
    相关资源
    最近更新 更多