Cuando migro mis nuevos modelos y datos, aparece el siguiente error para varias claves externas:
La propiedad de clave externa 'InsurancePolicy.InsuranceSubjectID1' se creó en estado oculto porque existe una propiedad en conflicto con el nombre simple 'InsuranceSubjectID' en el tipo de entidad, pero no está asignada, ya se usa para otra relación o es incompatible con la asociada. tipo de clave primaria.
Lo extraño es que defino mis relaciones de la misma manera en todos los modelos, pero algunos funcionan bien (se almacena FK sin 1) y otros no.
Ejemplo de mis modelos:
public class InsurancePolicy { public int InsurancePolicyID { get; set; } [DataType(DataType.Currency)] [Column(TypeName = "money")] public decimal FinalSum { get; set; } public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } public int? InsuredID { get; set; } public Insured? Insured { get; set; } public int? InsuranceSubjectID; public InsuranceSubject? InsuranceSubject { get; set; } public int? InsuranceSubtypeID; public InsuranceSubtype? InsuranceSubtype { get; set; } } public class InsuranceSubject { public int InsuranceSubjectID { get; set; } [Required] [StringLength(50)] public string Title { get; set; } public string Description { get; set; } [DataType(DataType.Currency)] [Column(TypeName = "money")] public decimal EstimatedValue { get; set; } public int? InsuredID; public Insured? Insured; public int? InsuranceSubjectTypeID { get; set; } public InsuranceSubjectType? InsuranceSubjectType { get; set; } public ICollection<InsurancePolicy>? InsurancePolicies { get; set; } }Probé mi código sin las propiedades de clave externa y solo dejé la propiedad de navegación de referencia (borré el int y dejé el objeto) y funcionó bien, pero necesito FK ints para futuras implementaciones.
Aquí está el enlace del repositorio de GitHub para obtener más información (extensión del modelo de rama): https://github.com/lenartgolob/Insurance-IS/tree/model-extension
Agregué public virtual frente a mis propiedades de navegación de referencia y resolvió el problema.
Para mí, el problema era que el tipo de ID de propiedad en la parte FK difería de la parte de la entidad PK:
[Range(1, int.MaxValue, ErrorMessage = "Please provide valid payment id")] public int PaymentId { get; set; } // NOTICE INT HERE SHOULD BE LONG public virtual Payment Payment { get; set; }donde Pago tenía propiedad larga para identificación:
public class Payment { public long Id {get;set;} //... }