Sql server 无法使用非主键生成外键

Sql server 无法使用非主键生成外键,sql-server,asp.net-mvc,Sql Server,Asp.net Mvc,我正在尝试创建一个名为“捐赠”的数据库,它在其中获得了此列IC其is和标识号值,因此我已经将其设置为IsUnique,但不知何故它仍然返回错误消息 捐赠\客户\目标\捐赠\客户\来源::引用约束的从属角色中所有属性的类型必须与主体角色中相应的属性类型相同。实体“捐赠”上的属性“IC”的类型与引用约束“捐赠\客户”中实体“客户”上的属性“CustomerID”的类型不匹配 这是捐赠和客户 顾客 捐赠 [Key] public int DonationId { get; set; } public

我正在尝试创建一个名为“捐赠”的数据库,它在其中获得了此列IC其is和标识号值,因此我已经将其设置为
IsUnique
,但不知何故它仍然返回错误消息

捐赠\客户\目标\捐赠\客户\来源::引用约束的从属角色中所有属性的类型必须与主体角色中相应的属性类型相同。实体“捐赠”上的属性“IC”的类型与引用约束“捐赠\客户”中实体“客户”上的属性“CustomerID”的类型不匹配

这是捐赠客户
顾客

捐赠

[Key]
public int DonationId { get; set; }
public DateTime? TransacTime { get; set; }
public int Amount { get; set; }

public string IC { get; set; }
[ForeignKey("IC")]
public Customers Customers { get; set; }

什么版本的EF?EF6要求您将IC声明为客户的密钥。@DavidBrowne Microsoft是EF6。使用非主键作为外键是否有任何方法可以做到这一点,或者这是不可能的。您可以使用任一键作为实体键。EF不关心哪一个。@DavidBrowne Microsoft将IC设置为外键,但它返回IC不是EF6中表的主键。实体只能有一个键。因此,将[Key]属性切换为IC。在SQL Server中,外键可以引用唯一索引。
[Key]
public int DonationId { get; set; }
public DateTime? TransacTime { get; set; }
public int Amount { get; set; }

public string IC { get; set; }
[ForeignKey("IC")]
public Customers Customers { get; set; }