gpt4 book ai didi

c# - 为现有 Entity Framework 实体创建基类型(EF 模型优先)

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:54 26 4
gpt4 key购买 nike

我正在处理一个使用 EF 设计器和 .edmx 文件(模型优先)的 Entity Framework 项目。实体映射到 MySQL 数据库,模型代码全部生成。我有 3 个实体,它们在逻辑上代表“资源”并共享一些但不是所有字段。例如:

public partial class ResourceA {
public int ID { get; set; }
public long ProductID { get; set; }
public string Path { get; set; }
}

public partial class ResourceB {
public int ID { get; set; }
public long ProductID { get; set; }
public string Label { get; set; }
}

public partial class ResourceC {
public int ID { get; set; }
public long ProductID { get; set; }
public bool Open { get; set; }
public bool Replacement { get; set; }
}

这些实体中的每一个都映射到数据库中的一个表。

我有一个代码区域,我想在其中循环遍历三种不同的资源类型。在该循环中,我无需访问 3 种实体类型之间不常见的属性。有没有一种方法可以在不创建三个单独的循环的情况下完成此操作,除了实体类型之外,所有代码都相同?

我尝试在 EF 设计器中创建一个 GenericResource 实体,然后使 ResourceX 实体成为它的固有实体,但在映射时我感到困惑,因为我不知道不需要 GenericResource 映射到数据库中的任何内容。我只想创建可以以只读方式处理三种资源类型中的任何一种的代码。我永远不需要创建新的 GenericResource

也许这对于模型优先是不可能的,我需要先切换到代码?

最佳答案

您可以引入一个接口(interface)并将其添加到每个实体的部分类文件中。但是要拥有类继承,您可能必须从现有数据库切换到 Code First。顺便说一句,最终您可能不得不从现有数据库切换到 Code First,因为它更好,并且受 EF Core 支持。

在 Code First 中,如果您希望数据库忽略基类,只需将其从 DbContext 中排除即可。您将能够在整个代码库中替换子类的实例,但是您将没有一个可以查询的 DbSet。

关于c# - 为现有 Entity Framework 实体创建基类型(EF 模型优先),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825455/

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