【问题标题】:Can Entity Framework 6 map foreign keys from a delimited string column?Entity Framework 6 可以从分隔字符串列映射外键吗?
【发布时间】:2021-04-30 08:38:26
【问题描述】:

我正在尝试从数据库中读取数据,不幸的是,该数据库被设计为将外键存储在分隔字符串而不是单独的表中,并且我没有更改数据库结构的选项。举个例子:

表 1 - Person

ID Name Fruit
1 "Bob" "1;3;5"
2 "Dave" "2;4;6"
3 "Mary" "1;2;3"
4 "Jane" "4;5;6"

表 2 - Fruit

ID Name
1 "apple"
2 "banana"
3 "orange"
4 "pear"
5 "lemon"
6 "lime"

[Person.Fruit] 列字符串中的每个数字都映射到 [Fruit.ID] 记录,我希望能够通过 EF 访问我的 Person 类中的 List<Fruit> 等效项。

是否可以配置实体框架(特别是 6,可能在OnModelCreating 方法中)使用此列中的拆分和解析的 id 作为内存中的外键?我不打算更改数据库,我只想使用 linq 轻松读取它,但是在构建另一个表时无法访问它,我无法在类中手动进行。

我知道 EF Core 具有值转换机制,但我无法找到将单个值转换为基于外键的列表导航属性的示例。我不使用 Core 的原因是因为我已经在同一个项目中使用 EF6 来访问另一个数据库,我不确定是否可以在同一个进程中使用两者。

我想在第一次访问数据库时可以构建额外的 manymany 映射表,只要它不会改变其他表的结构,因为它们正在被另一个黑盒使用图书馆。

我愿意接受任何关于如何在修改数据库或不修改数据库的情况下使用 EF6 或 EF Core 的建议,只要可以避免现有 EF6 实现的问题,它不会破坏现有数据库结构,我可以用 C# 来完成。

如果有帮助,数据库是 SQLite,它已经很有趣了。

干杯。

【问题讨论】:

    标签: c# sqlite entity-framework entity-framework-6 foreign-keys


    【解决方案1】:

    您可以为该表添加一个部分类到您的项目中,其中包括一个属性

    public partial class Person
    {
         public List<int> FruitIds => this.Fruit.Split(';').Select(int.Parse).ToList();
    }
    

    但是您只能在代码中的物化数据中使用它,而不是在数据库语句中自动包含或选择事物。

    如果您无法更改损坏的数据库,那么您无能为力。

    【讨论】:

    • 这是我自己得到的,但我想做Fruit 表查找作为内存序列化的一部分。
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 2017-08-17
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多