我正在努力实现的简短描述:
我的数据库中有几个表,我首先使用代码创建数据库(使用数据注释)。我正在尝试将多个字段标记为不同表格的FK。
Guid“AccountId”应该自己是账户表的FK。
Guid“AccountId”与Guid“CompanyId”一起构成FK到公司表。
“CompanyId”和“PersonId”应该是Person表的FK。
[Table("Timestamp")]
public class Timestamp : FullAuditedEntity<Guid>
{
public const int MaxCardNrLength = 100;
// The "AccountId" together with "PersonId" should be a FK to the Person table.
// The "AccountId" together with "CompanyId" should be a FK to the Company table.
// The "AccountId" standing alone should be a FK to the Account table
[Required, ForeignKey("Account"), ForeignKey("Company"), ForeignKey("Person")]
public virtual Guid AccountId { get; set; }
[Required, ForeignKey("Worksite")]
public virtual Guid WorksiteId { get; set; }
[Required, MaxLength(MaxCardNrLength)]
public virtual string CardNr { get; set; }
[Required]
public virtual DateTime StampedDate { get; set; }
[Required]
public virtual int StampedType { get; set; }
[ForeignKey("Company"), Column(Order = 1)]
public virtual Guid CompanyId { get; set; }
[ForeignKey("Person"), Column(Order = 2)]
public virtual Guid PersonId { get; set; }
public virtual Person Person { get; set; }
public virtual Account Account { get; set; }
public virtual Worksite Worksite { get; set; }
public virtual Company Company { get; set; }
}
所有这些混合形式作为一个整体形成了独特的FK,但我无法弄清楚如何使用Entity Framework执行此操作,因为它不是有效的语法:
[Required, ForeignKey("Account"), ForeignKey("Company")]
因为只能在单个变量上设置一个ForeingKey属性。
我有没有办法将两个变量标记为一个集体FK,或者以我现在的方式做任何方式?
感谢您的帮助。
修改
添加了我正在尝试完成和更新的数据库图表,以便包含所有字段的整个类都在此处。
答案 0 :(得分:0)
您可以使用流畅配置:doc
modelBuilder.Entity<Timestamp>().HasRequired(t => t.Company ).WithMany().HasForeignKey(t=>new{t.AccountId, t.CompanyId});
答案 1 :(得分:0)
如果要在许多外键中重用属性,则应按以下方式将ForeignKey
属性添加到导航属性中:
[ForeignKey("AccountId, PersonId")]
public virtual Person Person { get; set; }
[ForeignKey("AccountId, CompanyId")]
public virtual Company Company { get; set; }