无法确定外键的复合外键顺序

本文关键字:顺序 复合 无法确定 | 更新日期: 2023-09-27 17:54:30

我在两个模型之间建立关系时遇到了问题。表中有3个组合键。当我尝试链接类别时,问题发生了。代码到服务类别代码。如果我在两个表中使用相同的列名,EF就能够处理。但我不想使用category。categorycode。我是EF的新手。请帮助我如何通过注释和/或流畅的api来实现这一目标。

public class Category
{
    public Category()
    {
        this.Services= new HashSet<Service>();
    }
    [Key, Column(Order = 0)]
    public string ApplicationCode { get; set; }
    [Key, Column(Order = 1)]
    public string CompanyCode { get; set; }
    [Key, Column(Order = 2)]
    public string Code { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Service> Services { get; set; }
}
public class Service
{
    [Key, Column(Order = 0)]
    [ForeignKey("Category")]
    public string ApplicationCode { get; set; }
    [Key, Column(Order = 1)]
    [ForeignKey("Category")]
    public string CompanyCode { get; set; }
    [Key, Column(Order = 2)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    [ForeignKey("Category")]
    public string CategoryCode { get; set; }
    public string Description { get; set; }
    public string Remarks { get; set; }
    public virtual Category Category { get; set; }
}

无法确定外键的复合外键顺序

哦,我想现在回答你的问题太晚了。我在很多关系中都使用"秩序"这个词。例如:

public class Subscript
{
    [Key, Column(Order = 0)]
    public long ID { get; set; }
    [ForeignKey("Customer")]
    public int CustomerId { get; set; }
    public string ChatType { get; set; }
    [ForeignKey("Channel")]
    public int? ChannelId { get; set; }
    public virtual Channel Channel { get; set; }
    [ForeignKey("Watermark") ,Column(Order = 1)]
    public int? Watermark_Id { get; set; }
    [ForeignKey("Watermark"), Column(Order = 2)]
    public string Watermark_Title { get; set; }
    public virtual Watermark Watermark { get; set; }

}

public class Watermark
{
    [Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Key, Column(Order = 1, TypeName = "NVARCHAR")]
    [StringLength(100)]
    public string Title { get; set; }
}