实体关系 - 代码优先 - 多重关系

时间:2014-06-30 14:50:05

标签: sql entity-framework

我试图为我的数据库创建以下对象(CodeFirst), 我有以下问题:

当我尝试将新的一个或多个对象添加到新的srevice提供者插槽时(如下所示:)

 ServiceProviderSlots slot = new ServiceProviderSlots();

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

        ctx.ServiceProviderSlots.Add(slot);

我收到错误,因为我没有创建新对象,而且我错过了外键,但我希望使用该表中已存在的数据。

错误:

{"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_dbo.ServiceProviderServices_dbo.ServiceProviders_ServiceProviderID\". The conflict occurred in database \"qunadodb\", table \"dbo.ServiceProviders\", column 'ServiceProviderID'.\r\nThe statement has been terminated."}

也许它与此相关?

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

}

1 个答案:

答案 0 :(得分:0)

此消息表示您可能在数据库中有一个ID = 1的ServiceProvider。

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