我在使用代码优先方法创建外键时遇到了一些问题。
这是我的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
,但它没有用。
你有什么建议吗?
答案 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在其答案中所示)并告诉它哪个属性是该关系的外键。