EF6,复合键,足够注释?或者我是否还必须使用Fluent API?

时间:2015-06-20 02:23:59

标签: 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()方法中执行此操作?或者我必须创建一个配置类来执行此操作? 我在这篇文章中看到了一些东西(让我感到困惑):
  2. Entity Framework Multiple Column as Primary Key by Fluent Api

    1. ForeignKey的( “X”) 我猜X应该是表名而不是实体名,对吧? 例如。 X应该是AspNetUsers(在数据库中),而不是AspNetUser,它是实体名称。
    2. 谢谢。

2 个答案:

答案 0 :(得分:2)

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

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; }
}

答案 1 :(得分:0)

.video-container {
   position: relative;
   padding-bottom: 37.25%;
   padding-top: 25px;
   height: 0;
   margin-bottom: 30px;
}
.video-container iframe,
.video-container object,
.video-container embed {
  position: absolute;
  top: 0;
  left: 12.5%;
  width: 75%!important;
  height: 100%!important;
}