主键和外键问题

时间:2017-06-28 17:00:49

标签: c# entity-framework

我正在尝试使用复合键在2个类之间创建一对一的关系。我之前在使用简单PK的类中完成了它并且它可以工作但现在我需要加入一个具有复合PK的类并且不起作用。

以下是代码,我正在尝试使用SFI_Clientes加入SFI_EstadisticaVentasFcst

public class SFI_Clientes
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Key]
    [Column(Order = 0)]
    public string ID_Empresa { get; set; }
    [Key]
    [Column(Order = 1)]
    public string ID_Cliente { get; set; }
    [Key]
    [Column(Order = 2)]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
    public DateTime Fecha_Desde { get; set; }
    [Key]
    [Column(Order = 3)]
    [DataType(DataType.Date)]       
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
    public DateTime Fecha_Hasta { get; set; }
    [DisplayName("NOMBRE")]
    public string nombre { get; set; }
    [DisplayName("ID VENDEDOR")]
    public string ID_Vendedor { get; set; }
    [DisplayName("ID NAM")]
    public string ID_NAM { get; set; }
    [DisplayName("ID KAM")]
    public string ID_KAM { get; set; }

    public virtual SFI_Vendedor vendedor { get; set; }
    public virtual SFI_Kam kam { get; set; }
    public virtual SFI_Nam nam { get; set; }

}

public class SFI_EstadisticaVentasFcst
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Key]
    [Column(Order = 0)]
    [DisplayFormat(DataFormatString = "{0:0}")]
    public decimal anio { get; set; }
    [Key]
    [Column(Order = 1)]
    [DisplayFormat(DataFormatString = "{0:0}")]
    public decimal periodo { get; set; }
    [ForeignKey("cliente"), Column(Order = 0)]
    public string ID_Empresa { get; set; }
    [Key]        
    [ForeignKey("cliente"), Column(Order = 1)]
    public string ID_Cliente { get; set; }
    [Key]
    [Column(Order = 3)]
    public string producto { get; set; }
    public decimal fcst_cajas { get; set; }
    public decimal fcst_niv { get; set; }
    public decimal fcst_gsu { get; set; }
    public decimal venta_cajas { get; set; }
    public decimal venta_niv { get; set; }
    public decimal venta_gsu { get; set; }
    public decimal avance_cajas { get; set; }
    public decimal avance_gsu {get; set; }

    public virtual SFI_Clientes cliente { get; set; }
    public virtual SFI_JerarquiaProductos jerarquiaProductos { get; set; }

这是问题所在:

public JsonResult cargarListaEmpresas(string idEmpresa, string cliente, string vendedor, string nam, string kam, string categoriaProductos, DateTime fechaDesde, DateTime fechaHasta )
    {
        var c = db.SFI_EstadisticaVentasFcstDbSet.Where
            (x =>
            (string.IsNullOrEmpty(idEmpresa) ? true : x.ID_Empresa== idEmpresa) &&
            (string.IsNullOrEmpty(cliente) ? true : x.ID_Cliente == cliente) &&
            (string.IsNullOrEmpty(vendedor) ? true : x.cliente.ID_Vendedor == vendedor) &&
            (string.IsNullOrEmpty(kam) ? true : x.cliente.ID_KAM == kam) &&
            (string.IsNullOrEmpty(nam) ? true : x.cliente.ID_NAM == nam) &&
            (string.IsNullOrEmpty(categoriaProductos) ? true : x.jerarquiaProductos.descripcion_1 == categoriaProductos) &&
            (x.cliente.Fecha_Desde == fechaDesde) &&
            (x.cliente.Fecha_Hasta == fechaHasta)
            ).Distinct().OrderBy(s => s.ID_Empresa).Select(x => new SelectListItem
            {
                Text = x.ID_Empresa.ToString(),
                Value = x.ID_Empresa
            }).Distinct().OrderBy(x => x.Text).ToList();

        ViewBag.empresas = c;
        return Json(c, JsonRequestBehavior.AllowGet);
    }

错误是: “在模型生成期间检测到一个或多个验证错误: SFI_EstadisticaVentasFcst_cliente_Target_SFI_EstadisticaVentasFcst_cliente_Source ::关系约束中的从属角色和主要角色中的属性数必须相同。“

0 个答案:

没有答案