Sql 实体关系-代码优先-多个关系

Sql 实体关系-代码优先-多个关系,sql,entity-framework,Sql,Entity Framework,我正在尝试为我的DB CodeFirst创建以下对象, 我有以下问题: 当我尝试将新的一个或多个对象添加到新的srevice provider插槽时,如下所示: ServiceProviderSlots slot = new ServiceProviderSlots(); slot.ServiceProviderID = 1; slot.SlotServices.Add(new ServiceProviderServices() { ServiceProvid

我正在尝试为我的DB CodeFirst创建以下对象, 我有以下问题:

当我尝试将新的一个或多个对象添加到新的srevice provider插槽时,如下所示:

 ServiceProviderSlots slot = new ServiceProviderSlots();

        slot.ServiceProviderID = 1;
        slot.SlotServices.Add(new ServiceProviderServices() { ServiceProviderServiceID = 1 });

        ctx.ServiceProviderSlots.Add(slot);
我得到一个错误,因为我没有创建一个新对象,并且我缺少外键,但我希望使用该表中已经存在的数据

错误:

也许和这有关

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    }
我之所以使用它是因为我无法创建数据库,否则,我会出现另一个错误

见以下结构:

public class BusinessCategories
{

    [Key]
    public int CategoryID { get; set; }
    public String Title { get; set; }        
}



public class BusinessTypes
{
    [Key]
    public int TypeID { get; set; }
    public String Title { get; set; }

    public int CategoryID { get; set; }
    public virtual BusinessCategories Categories { get; set; }         
}

public class ServiceProviders
{

    [Key]
    public int ServiceProviderID { get; set; }

    public String Name { get; set; }

    public Int32 TypeID { get; set; }
    public virtual BusinessTypes Type { get; set; }

}

public class ServiceProviderServices
{
    [Key]
    public Int32 ServiceProviderServiceID { get; set; }

    public String Price { get; set; }

    public Int32 ServiceProviderID { get; set; }
    public virtual ServiceProviders ServiceProvider { get; set; }

    public Int32 SubServiceID { get; set; }
    public virtual SubServices SubService { get; set; }

}


public class ServiceProviderSlots
{
    public ServiceProviderSlots()
    {
        SlotServices = new List<ServiceProviderServices>();

    }
    [Key]
    public Int32 SlotID { get; set; }


    public String Name { get; set; }

    public Int32 ServiceProviderID { get; set; }
    [ForeignKey("ServiceProviderID")]
    public virtual ServiceProviders ServiceProvider { get; set; }

    public virtual ICollection<ServiceProviderServices> SlotServices { get; set; }

}

此消息表示数据库中可能还有Id为1的ServiceProvider


在这个cas中,您必须将实体附加到上下文。

我想要一个多对多关系,我通过创建一个子表来解决它。
public class BusinessCategories
{

    [Key]
    public int CategoryID { get; set; }
    public String Title { get; set; }        
}



public class BusinessTypes
{
    [Key]
    public int TypeID { get; set; }
    public String Title { get; set; }

    public int CategoryID { get; set; }
    public virtual BusinessCategories Categories { get; set; }         
}

public class ServiceProviders
{

    [Key]
    public int ServiceProviderID { get; set; }

    public String Name { get; set; }

    public Int32 TypeID { get; set; }
    public virtual BusinessTypes Type { get; set; }

}

public class ServiceProviderServices
{
    [Key]
    public Int32 ServiceProviderServiceID { get; set; }

    public String Price { get; set; }

    public Int32 ServiceProviderID { get; set; }
    public virtual ServiceProviders ServiceProvider { get; set; }

    public Int32 SubServiceID { get; set; }
    public virtual SubServices SubService { get; set; }

}


public class ServiceProviderSlots
{
    public ServiceProviderSlots()
    {
        SlotServices = new List<ServiceProviderServices>();

    }
    [Key]
    public Int32 SlotID { get; set; }


    public String Name { get; set; }

    public Int32 ServiceProviderID { get; set; }
    [ForeignKey("ServiceProviderID")]
    public virtual ServiceProviders ServiceProvider { get; set; }

    public virtual ICollection<ServiceProviderServices> SlotServices { get; set; }

}