EF 1对1需要关系

时间:2016-05-03 12:44:19

标签: c# entity-framework

我有一个如下所示的属性:

public class CameraAttribute
{
    public int Id { get; set; }
    public int ProductId { get; set; }
    public string CompatibleMemory { get; set; }
    [MaxLength(255)] public string WhiteBalance { get; set; }
    [MaxLength(255)] public string SceneModes { get; set; }
    [MaxLength(255)] public string ShootingModes { get; set; }
    [MaxLength(100)] public string PhotoEffects { get; set; }
    [MaxLength(255)] public string CameraPlayback { get; set; }
    public bool Tripod { get; set; }
    public bool DirectPrinting { get; set; }
    [MaxLength(50)] public string Colour { get; set; }

    public CameraAttributePicture Picture { get; set; }
    public CameraAttributeVideo Video { get; set; }
    public CameraAttributeAudio Audio { get; set; }

    public CameraAttributeBattery Battery { get; set; }
    public CameraAttributeDimension Dimensions { get; set; }
    public CameraAttributeDisplay Display { get; set; }
    public CameraAttributeLightExposure Exposure { get; set; }
    public CameraAttributeFlash Flash { get; set; }
    public CameraAttributeFocusing Focusing { get; set; }
    public CameraAttributeInterface Interface { get; set; }
    public CameraAttributeLens Lens { get; set; }
    public CameraAttributeNetwork Network { get; set; }
    public CameraAttributeShutter Shutter { get; set; }

    [ForeignKey("ProductId")] public Product Product { get; set; }
}

音频如下所示:

public class CameraAttributeAudio
{
    public int Id { get; set; }
    public int AttributeId { get; set; }
    [MaxLength(50)] public string SupportedFormats { get; set; }

    [ForeignKey("AttributeId")] public CameraAttribute Attributes { get; set; }
}

我在DbContext中设置了一些映射,如下所示:

modelBuilder.Entity<CameraAttribute>().HasRequired(m => m.Audio).WithRequiredPrincipal(m => m.Attributes).WillCascadeOnDelete(true);

但是当我尝试运行命令 add-migration 时出现此错误:

  

CameraAttribute_Audio_Target :: Multiplicity在关系'CameraAttribute_Audio'中的角色'CameraAttribute_Audio_Target'中无效。由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为'*'。

从Attribute类中可以看出,所有属性都会抛出此错误。 有谁知道为什么以及如何解决它?

1 个答案:

答案 0 :(得分:1)

我认为问题是CameraAttributeAudio类也有自己的Id属性,而在一对一的关系中它是不必要的,因为AttributeId可以同时识别CameraAttribute 1}}和CameraAttributeAudio。它应该使用AttributeId作为其主要[Key]

public class CameraAttributeAudio
{
    [Key]
    [ForeignKey("Attributes")] 
    public int AttributeId { get; set; }

    [MaxLength(50)] 
    public string SupportedFormats { get; set; }

    public CameraAttribute Attributes { get; set; }
}

我将[ForeignKey]属性移动到AttributeId属性,以便注释位于一个位置。虽然将它放在Attributes属性上也是正确的。