我正在尝试应用唯一的复合约束,约束的一部分是外键。我似乎可以使它起作用的唯一方法是在我的域类中显式定义外键,这是我要避免的。这可能吗?
该问题和解决方法同时适用于HasAlternateKey
和HasIndex
。该解决方案构建良好,但是在创建迁移时会忽略该约束,直到shadow属性在domain类中变为实属性为止。
这不起作用(迁移会忽略此内容):
entity.HasAlternateKey(e => new { e.Header.Id, e.Version, e.StartDate });
在将阴影属性HeaderID转换为真实的对象之后,这确实起作用:
entity.HasAlternateKey(e => new { e.HeaderId, e.Version, e.StartDate });
entity.HasOne(e => e.Header).WithMany().HasForeignKey(f => f.HeaderId);
答案 0 :(得分:2)
Fluent API不支持e.Header.Id
之类的嵌套属性表达式。
与阴影属性一样,您应该使用相应的Fluent API的string
重载通过名称引用它们。
在您的情况下:
entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");