Entity framework 使用EF Codefirst的查找表
我想先用EF代码创建Resource和RelatedResources表,如下所示:Entity framework 使用EF Codefirst的查找表,entity-framework,ef-code-first,Entity Framework,Ef Code First,我想先用EF代码创建Resource和RelatedResources表,如下所示: Table Resource int Id string ResourceName int Category Table RelatedResource int ResourceId int RelatedResourceId 我试了一下,但是 错误:类型“Models.ResourceRelated”的属性“ResourceId”上的ForeignKeyAttribute无效。在依赖类型“Models.R
Table Resource
int Id
string ResourceName
int Category
Table RelatedResource
int ResourceId
int RelatedResourceId
我试了一下,但是
错误:类型“Models.ResourceRelated”的属性“ResourceId”上的ForeignKeyAttribute无效。在依赖类型“Models.ResourceRelated”上找不到导航属性“Resource”。名称值应为有效的导航属性名称
public class ResourceRelated
{
[ForeignKey("Resource")]
public int ResourceId { get; set; }
public virtual Resource Resoure { get; set; }
public virtual ICollection<Resource> RelatedResource { get; set; }
}
好心的忠告 如果您想要RelatedResource表,那么就需要多对多关系。您可以通过下一种方式实现这一点
public class Resource
{
public int ResourceId { get; set; }
public string ResourceName { get; set; }
public int Category { get; set; }
[InverseProperty("Resoure")]
public virtual ICollection<RelatedResource> RelatedResource { get; set; }
[InverseProperty("ResourceRelated")]
public virtual ICollection<RelatedResource> ResourceRelated { get; set; }
}
public class RelatedResource
{
[Key]
[Column(Order = 1)]
[ForeignKey("Resoure")]
public int ResourceId { get; set; }
[Key]
[Column(Order = 2)]
[ForeignKey("ResourceRelated")]
public int ResourceRelatedId { get; set; }
public virtual Resource Resoure { get; set; }
public virtual Resource ResourceRelated { get; set; }
}
但若您想要有资源树,那个么就不需要RelatedResource表
public class Resource
{
public int ResourceId { get; set; }
public string ResourceName { get; set; }
public int Category { get; set; }
public int? ResourceRelatedId { get; set; }
public Resource ResourceRelated { get; set; }
[ForeignKey("ResourceRelatedId")]
public virtual ICollection<Resource> RelatedResource { get; set; }
}
我想获取:Select*from dbo.ResourceDetails,其中ResourceId在Select rr.RelatedResourceId from dbo.ResourceDetails rd内部连接dbo.RelatedResource rr On rd.ResourceId=rr.ResourceId rd.id=1
internal class ResourceConfiguration : EntityTypeConfiguration<Resource>
{
public ResourceConfiguration()
{
HasMany(s => s.ResourceRelated).WithMany(c => c.RelatedResource)
.Map(cs => {
cs.MapLeftKey("ResourceId");
cs.MapRightKey("RelatedResourceId");
cs.ToTable("RelatedResource"); }
);
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
///other configuration code
modelBuilder.Configurations.Add(new ResourceConfiguration());
}
public class Resource
{
public int ResourceId { get; set; }
public string ResourceName { get; set; }
public int Category { get; set; }
public int? ResourceRelatedId { get; set; }
public Resource ResourceRelated { get; set; }
[ForeignKey("ResourceRelatedId")]
public virtual ICollection<Resource> RelatedResource { get; set; }
}