EF Core - 迁移中未检测到包括导航 属性 在内的唯一约束
EF Core - Unique constraint including navigation property not detected in migration
我正在尝试应用唯一的复合约束,约束的一部分是外键。我似乎可以让它工作的唯一方法是在我的域 class 中明确定义外键,我想避免这种情况。这可能吗?
此问题和解决方法适用于 HasAlternateKey
和 HasIndex
。解决方案构建良好,但在创建迁移时忽略约束,直到影子 属性 在域 class.
中变成真实的 属性
这不起作用(迁移会忽略它):
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);
Fluent API 不支持嵌套 属性 表达式,例如 e.Header.Id
.
与影子属性一样,您应该通过 name 使用相应的 fluent API.[=13= 的 string
重载来引用它们]
你的情况:
entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");
我正在尝试应用唯一的复合约束,约束的一部分是外键。我似乎可以让它工作的唯一方法是在我的域 class 中明确定义外键,我想避免这种情况。这可能吗?
此问题和解决方法适用于 HasAlternateKey
和 HasIndex
。解决方案构建良好,但在创建迁移时忽略约束,直到影子 属性 在域 class.
这不起作用(迁移会忽略它):
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);
Fluent API 不支持嵌套 属性 表达式,例如 e.Header.Id
.
与影子属性一样,您应该通过 name 使用相应的 fluent API.[=13= 的 string
重载来引用它们]
你的情况:
entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");