C# 我的数据库实体有一个通用的基本基本实体,但如何将基本实体的Id值映射到数据库实体?

C# 我的数据库实体有一个通用的基本基本实体,但如何将基本实体的Id值映射到数据库实体?,c#,entity-framework-core,ef-fluent-api,C#,Entity Framework Core,Ef Fluent Api,如何交替使用实体基Id或数据库列Id public partial class Orders : EntityBase<int> { protected Orders() { } public int Orderid { get; set; } public override int Id { get => base.Id; set => base.Id = Orderid; } } 实体库: public abstract class Enti

如何交替使用实体基Id或数据库列Id

public partial class Orders : EntityBase<int>
{
    protected Orders() { }
    public int Orderid { get; set; }
    public override int Id { get => base.Id; set => base.Id = Orderid; }
}
实体库:

public abstract class EntityBase<T> : IEntity<T>
{
    public virtual T Id { get; set; }
}
问题:我可以映射EntityBase的Id和db列的主键吗?例如:order entity的键->orderId以同步应用程序代码中的值,base的用户集Id或entity的orderId都应包含相同的值,并且在检索时,这些值在给定时间应返回相同的值。在OnModelCreating方法中,有没有办法通过fluentapi实现上述同步功能?
附言:如果你还没有理解这个问题,请说哪个部分没有澄清,而不是使用权限:

如果我理解正确,你需要你的订单。Orderid是DB表的自动增量主键,对吗? 假设您使用的是SQLite,if not可能是相似的,但不是相同的单词,您可以这样做:

public partial class Orders : EntityBase<int> {

    [PrimaryKey, AutoIncrement]
    public int Orderid { get; set; }
    protected Orders() { }
    public override int Id { get => base.Id; set => base.Id = Orderid; } 
}
使用订单模型创建/更新表时,SQLite应完成其余工作。
L-

基本上,如果我正确理解了您的问题,您希望有一个带有Id的基类,但在SQL中,您对Id列的命名不同。您希望为更新设置别名,以便在设置更新Id时,更新也会设置DB Id

这更像是一种体系结构,如果您真的需要,您可以编写一个工具来帮助您自动构建脚手架,但这似乎有缺陷,而且更复杂

相反,我将尝试通过修改您的体系结构来解决此问题。 解决这个问题的一个简单方法就是使用Id

public partial class Orders : EntityBase<int>
{
    protected Orders() { }
    [Column("Orderid")]
    public int Id { get; set; }
}
您可以将列直接映射到Id属性,从而避免整个问题。 如果您同时拥有OrderId和Id

public partial class Orders : EntityBase<int>
{
    protected Orders() { }
    public int Orderid { get; set; }
    public override int Id { get => Orderid; set => Orderid = value; }
}

但是使用这种架构通常是一个坏主意,因为您的EntityBase是通用的,而且似乎很容易出错,所以它很混乱

我一点也不明白你在问什么?@DavidG-希望最近的编辑能为你澄清这个问题。对不起,不,没有。读完标题后,我跳了进去,准备写下嘿,ID可能不够,取决于db的设计。如果将派生类型映射到同一个表,则一切正常,因为它们都使用相同的PK,但如果将派生类型映射到单独的表,则数据库可能会为不同类型的许多不同对象生成相同的ID。在这种情况下,您可能需要向ID添加一些“鉴别器”值,如person:5,以便稍后知道ID来自哪个表。但是,在阅读了您的问题和编辑之后,我真的不知道您在问什么。只需添加相应的[Key]和[NotMapped]属性。您将无法在查询中使用“未映射”属性。