Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用EF Codefirst的查找表_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 使用EF Codefirst的查找表

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

我想先用EF代码创建Resource和RelatedResources表,如下所示:

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; }
}