gpt4 book ai didi

entity-framework - 首先使用 Entity Framework 6.1 代码持久化和检索序列化实体属性

转载 作者:行者123 更新时间:2023-12-04 08:35:45 24 4
gpt4 key购买 nike

示例:假设我有这三个类。 Foo是具有 DbSet 的适当 Entity Framework 实体,而我希望我的 EF DbContext 不知道 BarBaz因为我已经用我的化妆标记了 Foo's Bar 属性(property) SerializedColumn属性。通过应用该属性,我希望 EF 将 Bar 的实例及其 Bazes 序列化为单个字符串字段,并在 EF 实现 Foo 时将 Bar 透明地反序列化为 Bar 对象。

public class Foo
{
public Guid Id { get; set; }
[SerializedColumn]
public Bar Bar { get; set; }
// ..
}

public class Bar
{
public string Name { get; set; }
public Baz[] Baz { get; set; }
// ..
}

public class Baz
{
public string Name { get; set; }
// ..
}

所以 Foo 的表列看起来像:
[Id] [uniqueidentifier] NOT NULL
[Bar] [nvarchar](max) NULL

当我查询 Foo 时我用 Bar 找回了一个属性已经反序列化了。当我插入或更新 Foo Bar属性被 EF 序列化,而我不必考虑它。我唯一要做的就是添加 [SerializeColumn]属性的属性。

目标:
  • 我不一定要寻找一个完整的解决方案(尽管我会接受它),而是寻求有关从何处跳入 EF 管道以及如何执行此操作的指导。 IE。我需要考虑哪些 EF 类、配置、约定等?
  • 我希望按照人们的预期生成迁移。也就是说,我不想要我的 Bar属性转换为指向“Bar”表的“Bar_Id”字段。相反,我想要一个 nvarchar(max) “Bar”字段将包含 Bar 的序列化版本目的。如果这根本不可能,请在您的回答中说出来。

  • 笔记:
  • 这个想法是在观看 Building Applications with Entity Framework 6 后产生的。罗文米勒的视频。
  • ComplexType不符合我的需要。我需要深度序列化,并且不需要能够过滤或排序已序列化内容的任何属性。
  • 我计划使用 Newtonsoft 的 JSON 库进行序列化,但序列化如何发生并不重要。
  • 最佳答案

    唯一的解决办法是这样

    public class Foo
    {
    public Guid Id { get; set; }

    // Not Mapped attribute will make EF
    // ignore this property completely
    [NotMapped]
    public Bar BarObject {
    get;
    set;
    }

    public string Bar{
    get{
    return JsonConvert.Serialize(BarObject);
    }
    set{
    BarObject = JsonConvert.Deserialize<BarObject>(value);
    }
    }
    }

    根据@zds 的建议更新

    关于entity-framework - 首先使用 Entity Framework 6.1 代码持久化和检索序列化实体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905712/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com