Reputation: 5075
I am working on ASP.NET application with Entity Framework 6. I have already database and I am using Code First existing Database approach.
I am two table and second table has Foriegn key along with its own primary key. I have used Column order but still getting following error. I have search online, tried different combination but still getting error.
'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll but was not handled in user code Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity_Source: : Multiplicity is not valid in Role 'Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity_Source' in relationship 'Sys_Nav_FunctionHierarchyEntity_Sys_Nav_FunctionEntity'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.
[Table("Sys_Nav_Function")]
public class Sys_Nav_FunctionEntity
{
public Sys_Nav_FunctionEntity()
{ }
[Key]
public int Function_ID { get; set; }
[StringLength(250)]
[Required(ErrorMessage = "Required Title")]
[Display(Name = "Function Title")]
public string FunctionName { get; set; }
[Required(ErrorMessage = "Required Hierarchy Level")]
[Display(Name = "Hierarchy Level")]
public int Hierarchy_Level { get; set; }
public Sys_Nav_FunctionHierarchyEntity Sys_Nav_FunctionHierarchyEntity { get; set; }
public ICollection<Sys_Nav_FunctionInActionEntity> Sys_Nav_FunctionInActionEntity { get; set; }
public ICollection<Sys_Nav_FunctionInControllerEntity> Sys_Nav_FunctionInControllerEntity { get; set; }
}
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
public Sys_Nav_FunctionHierarchyEntity()
{
}
[Key, Column(Order =0)]
public int Hierarchy_ID { get; set; }
[ForeignKey("Sys_Nav_FunctionEntity"), Column(Order =1)]
public int Function_ID { get; set; }
public int Parent_Function_ID { get; set; }
public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}
Upvotes: 3
Views: 1991
Reputation: 5075
I have remove composite key, I have tried different combination but no luck, however its working by using same key as foreign key and also changed in database.
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
public Sys_Nav_FunctionHierarchyEntity()
{
}
[Key, ForeignKey("Sys_Nav_FunctionEntity")]
[Required]
public int Function_ID { get; set; }
public int Parent_Function_ID { get; set; }
public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}
Upvotes: 1
Reputation: 87
I think that the ForeignKey attribute should be set on the navigation property:
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
//...
public int Function_ID { get; set; }
[ForeignKey("Function_ID")]
public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}
If Parent_Function_ID is also a foreign key to the same table, you can do it the same way.
Also, in the first class:
public Sys_Nav_FunctionHierarchyEntity Sys_Nav_FunctionHierarchyEntity { get; set; }
should be a collection (if I understood the probem correctly)
Upvotes: 1
Reputation: 699
Try this
[Table("Sys_Nav_FunctionHierarchy")]
public class Sys_Nav_FunctionHierarchyEntity
{
public Sys_Nav_FunctionHierarchyEntity()
{
}
[Key, Column(Order =0)]
public int Hierarchy_ID { get; set; }
[ForeignKey("Function_ID"), Column(Order =1)]
public int Function_ID { get; set; }
public int Parent_Function_ID { get; set; }
public Sys_Nav_FunctionEntity Sys_Nav_FunctionEntity { get; set; }
}
The foriegn key you have in class B is linked to the table and not to the property.
I believe the above code should give you the correct result
Upvotes: 2