我应该如何在实体框架中创建这种关系?

Posted

技术标签:

【中文标题】我应该如何在实体框架中创建这种关系?【英文标题】:How should I create this relationship in Entity Framework? 【发布时间】:2019-08-11 20:37:25 【问题描述】:

在我之前的问题中,我提到我正在开发一个销售点应用程序。我使用的平台是 WPF、MVVM 和实体框架(代码优先)。由于实体框架代码优先有自己的逻辑来映射实体和关系,我对一个案例感到困惑。

我有一个EntityBase 类:

public class EntityBase

    public DateTime? CreatedAt  get; set; 
    public User CreatedBy  get; set; 
    public DateTime? UpdatedAt  get; set; 
    public User UpdatedBy  get; set; 


public class User : EntityBase

    public int UserId  get; set; 
    public string Username  get; set; 
    public string Password  get; set; 

既然User类有EntityBase类成员,会不会在数据库端出现问题?

或者我应该像这样保留数据:

public class EntityBase

    public DateTime? CreatedAt  get; set; 
    public int CreatedByUserId  get; set; 
    public DateTime? UpdatedAt  get; set; 
    public int UpdatedByUserId  get; set; 

【问题讨论】:

【参考方案1】:

以这种方式创建您的模型:

public class EntityBase
    
        public DateTime? CreatedAt  get; set; 
        public int CreatedById  get; set; 
        [ForeignKey("CreatedById")]
        public User CreatedBy  get; set; 
        public DateTime? UpdatedAt  get; set; 
        public int UpdatedById  get; set; 
        [ForeignKey("UpdatedById")]
        public User UpdatedBy  get; set; 
    
    public class User
    
        public int UserId  get; set; 
        public string Username  get; set; 
        public string Password  get; set; 
    

【讨论】:

以上是关于我应该如何在实体框架中创建这种关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个 DataMap 中创建与 ObjEntity 的关系?

我是不是必须进行选择查询才能在实体框架中创建关系?

如何在实体框架中创建只读实体?

如何在实体框架数据库迁移中创建全文目录? [复制]

如何在实体框架中创建多对多映射?

在 Doctrine 中创建多对多关系的最佳实践。