When I migrate my new models and data I get the following error for multiple foreign keys:
The foreign key property ‘InsurancePolicy.InsuranceSubjectID1’ was created in shadow state because a conflicting property with the simple name ‘InsuranceSubjectID’ exists in the entity type, but is either not mapped, is already used for another relationship, or is incompatible with the associated primary key type.
The weird thing is that I define my relationships the same throughout all models, but some work okay (FK without 1 is stored) and some don’t.
Example of my models:
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; }
}
I tried my code without the foreign key properties and only left the reference navigation property (deleted the int and left the object) and it worked okay, but I need FK ints for future implementation.
Here is GitHub repo link for more insight (branch model-extension): https://github.com/lenartgolob/Insurance-IS/tree/model-extension
5
Answers
I added
public virtual
in front of my reference navigation properties and it solved the issue.For me the problem was the type of property ID in the FK part differed from the one in PK entity part:
where Payment had long property for ID:
For me was that I mistakenly referred the same entity twice:
Ok.. For me.
I had Parent/Child relationship.
And I had put in the scalar’s (on the child) that also included the parent FK (as int), and had defined the orm mapping (again, on the child) for the (same) scalar FK "int".
I had Orm-Mapped the MyParentKey (in this case an "int") on the MyChildOrmMap.
But I had NOT orm-mapped the OBJECT (in this case the "MyParent" object).. via the property that pointed to that object. Aka, the "TheMyParent" property.
Once I coded the 1:N relationship for the OBJECT (in this case the ‘TheMyParent’) (and the reciprocal MyKids), the error went away.
Aka, I was missing the below "HasOne/WithMany" orm-mapping (the below code would be in the MyChildMap (the fluent orm map)
for me it was repetition of key.