c# - EF6,Composite Key,注释够了吗?或者我还必须使用 Fluent API 吗?

标签 c# entity-framework

我有 3 个实体:

public class AspNetUser
{
  public string Id {get; set;}
}

public class Event
{
  public int Id {get; set;}
}

public class UserEvent
{
    [Column(Order=0), Key, ForeignKey("AspNetUsers")]
    public string UserId { get; set; }

    [Column(Order=1), Key, ForeignKey("Events")]
    public int EventId { get; set; }

    public DateTime EnrolTime { get; set; }

    public virtual AspNetUser User { get; set; }
    public virtual Event Event { get; set; }
}

正如您所看到的,UserEvent 只是一个关系表,其中包含来自 2 个表的 UserId 和 EventId。

我的问题是:

  1. 注释是否足以告诉 EF 创建 2 个外键?或者我还必须使用 Fluent API 在 DbContext 类中的 OnModelCreating() 方法 中执行此操作?或者我必须创建一个配置类才能这样做? 我在这篇文章中看到了一些内容(这让我很困惑):

Entity Framework Multiple Column as Primary Key by Fluent Api

  • 外键(“X”) 我想 X 应该是表名称而不是实体名称,对吗? 例如。 X 应该是 AspNetUsers(在数据库中),而不是作为实体名称的 AspNetUser。
  • 谢谢。

    最佳答案

    是的,使用数据注释就足够了,但问题是你需要在 ForeignKey 中指定attribute 导航属性的名称,表示其作为外键的关系:

    public class UserEvent
    {
        [ Key,Column(Order=0), ForeignKey("User")]
        public string UserId { get; set; }
    
        [ Key,Column(Order=1), ForeignKey("Event")]
        public int EventId { get; set; }
    
        public DateTime EnrolTime { get; set; }
    
        public virtual AspNetUser User { get; set; }
        public virtual Event Event { get; set; }
    }
    

    或者,您可以将 ForeignKey 注释应用于导航属性,并告诉它哪个属性是关系的外键:

    public class UserEvent
    {
        [Key,Column(Order=0)]
        public string UserId { get; set; }
    
        [Key,Column(Order=1)]
        public int EventId { get; set; }
    
        public DateTime EnrolTime { get; set; }
    
        [ForeignKey("UserId")]
        public virtual AspNetUser User { get; set; }
        [ForeignKey("EventId")]
        public virtual Event Event { get; set; }
    }
    

    关于c# - EF6,Composite Key,注释够了吗?或者我还必须使用 Fluent API 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949623/

    相关文章:

    c# - 如何以最有效的方式从哈希集中迭代和删除元素

    c# - AjaxControlToolkit AjaxFileUpload 无法上传 IIS 保留文件类型

    c# - 将字符串传递给 C# 可执行文件

    oracle - 使用 Entity Framework 时不写入默认值

    c# - Azure:.NET Framework(首先使用 EF 代码)和 Microsoft SQL Server 对于某些查询突然出现 CPU 峰值

    c# - 通过操作/命令在数据上下文中设置属性

    c# - 绘制图像时 : System. Runtime.InteropServices.ExternalException: GDI 中发生一般性错误

    c# - 使用 Linq 语句从 intellisense 中选择缺少的方法

    entity-framework - 架构无效且类型无法加载,因为程序集包含 EdmSchemaAttribute

    c# - EF Code First DropCreateDatabase始终不执行