实体框架 - 外键名称

时间:2015-08-13 17:19:23

标签: mysql sql-server entity-framework foreign-keys

我在使用代码优先方法创建外键时遇到了一些问题。

这是我的UserTable

public class UserTable
{
    //USERNAME
    [Key]
    public string Username { get; set; }

    //NAVIGATION PROPERTY
    public virtual ICollection<AuctionTable> Auctions { get; set; }

}

这是我的AuctionTable

public class AuctionTable
{
        //AUCTION ID
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
        public int AuctionId { get; set; }

        //NAVIGATION PROPERTY
        public string Seller { get; set; }
        public virtual UserTable Users{ get; set; }
}

卖家应该是我的FK,但程序似乎只有在我将其重命名为&#34; Username&#34; (另一个表的主键)。

我尝试使用外键标记[ForeignKey("UserTable")]而不是Seller,但它没有用。

你有什么建议吗?

2 个答案:

答案 0 :(得分:1)

将此作为您的AuctionTable:

public class AuctionTable
{
    //AUCTION ID
    [Key]
    public int AuctionId { get; set; }

    //NAVIGATION PROPERTY
    public string Seller { get; set; }
    [ForeignKey("Seller")]
    public virtual UserTable Users { get; set; }
}

答案 1 :(得分:1)

Code First有一组规则或规则,用于在发现关系时尝试查找外键属性。规则基于属性名称​​。如果外键属性名为[Target Type Key Name][Target Type Name] + [Target Type Key Name][Navigation Property Name] + [Target Type Key Name].,则会按约定发现该外键属性。您添加的Seller属性与这三个规则中的任何一个都不匹配。将ForeignKey属性添加到Seller FK属性,以及告诉它哪个导航属性表示它是外键的关系的信息,将解决问题:

public class AuctionTable
{
    [Key]
    public int AuctionId { get; set; }

    [ForeignKey("User")]
    public string Seller { get; set; }

    public virtual UserTable User { get; set; }
}

或者,您可以将ForeignKey注释应用于导航属性(如@Andy在其答案中所示)并告诉它哪个属性是该关系的外键。