一对一关系,不同的键列名,实体框架,代码优先方法

6

我有两个已经创建好的表格,分别是DocumentDocumentStyle。它们通过DocumentID列之间存在一对一关系。然而,在Document表中该列被称为Id,而在DocumentStyle表中被称为DocumentId

类似这样:

Document            DocumentStyle 
|----------|        |----------------|
|Id - Key  |<------>|DocumentId- key |
|Name-VChar|        |Color     -VChar|
|Desc-VChar|        |Font      VChar |
|----------|        |----------------|

我在VS中遇到了以下错误

在类型“KII.Models.Document”的属性“DocumentStyle”上的ForeignKeyAttribute无效。在从属类型“KII.Models.Document”上未找到外键名称“DocumentId”。Name值应为逗号分隔的外键属性名称列表。

这是Document模型类代码的一部分。

[ForeignKey("DocumentId")]  
public DocumentStyle DocumentStyle { get;set; }

编辑:

这是我的类的代码。

public class Document
{
    [Key]
    public int ID { get; set; }
    
    public string Name { get; set; }
    public int FundId { get; set; }
    public int ClientId { get; set; }
        
    [ForeignKey("FundId")]
    public Fund Fund { get; set; }

    [ForeignKey("ClientId")]
    public Client Client { get; set; }
    
    [ForeignKey("ID")]
    public DocumentStyle DocumentStyle { get; set; }
        
    public Document()
    {

    }

    public Document(DocumentStyle documentStyle)
    {
        DocumentStyle = documentStyle;
    }

}

public class DocumentStyle
{
    public DocumentStyle()
    {

    }

    [Key]
    [DisplayName("Document ID")]
    public int DocumentId { get; set; }

    [ForeignKey("DocumentId")]
    public Document Document { get; set; }

    [DisplayName("Title Foreground Color")]
    public string TitleForegroundColor { get; set; }

    [DisplayName("Title Background Color")]
    public string TitleBackgroundColor { get; set; }

    [DisplayName("Title Font Family")]
    public string TitleFontFamily { get; set; }

    [DisplayName("Title Font Size")]
    public string TitleFontSize { get; set; }

    [DisplayName("Title Font Style")]
    public string TitleFontStyle { get; set; }

    [DisplayName("Title Font Weight")]
    public string TitleFontWeight { get; set; }

    [DisplayName("Title Text Decoration")]
    public string TitleTextDecoration { get; set; }

    [DisplayName("Section Title Foreground Color")]
    public string SectionTitleForegroundColor { get; set; }

    [DisplayName("Section Title Background Color")]
    public string SectionTitleBackgroundColor { get; set; }

    [DisplayName("Section Title Font Family")]
    public string SectionTitleFontFamily { get; set; }

    [DisplayName("Section Title Font Size")]
    public string SectionTitleFontSize { get; set; }

    [DisplayName("Section Title Font Styled")]
    public string SectionTitleFontStyle { get; set; }

    [DisplayName("Section Title Font Weight")]
    public string SectionTitleFontWeight { get; set; }

    [DisplayName("Section Title Text Decoration")]
    public string SectionTitleTextDecoration { get; set; }

    [DisplayName("Paragraph Foreground Color")]
    public string ParagraphForegroundColor { get; set; }

    [DisplayName("Paragraph Background Color")]
    public string ParagraphBackgroundColor { get; set; }

    [DisplayName("Paragraph Font Family")]
    public string ParagraphFontFamily { get; set; }

    [DisplayName("Paragraph Font Size")]
    public string ParagraphFontSize { get; set; }

    [DisplayName("Paragraph Font Style")]
    public string ParagraphFontStyle { get; set; }

    [DisplayName("Paragraph Font Weight")]
    public string ParagraphFontWeight { get; set; }

    [DisplayName("Paragraph Text Decoration")]
    public string ParagraphTextDecoration { get; set; }

    [DisplayName("Logo")]
    public byte[] Logo { get; set; }
}
1个回答

6

ForeignKey属性将外键属性和导航属性配对。它不定义相关表的属性!因此,您必须使用以下任一选项:

public class Document
{
    public int Id { get; set; }
    [ForeignKey("Id")]
    public DocumentStyle DocumentStyle { get; set; }
}

如果Document是依赖实体或:
public class DocumentStyle
{
    public int DocumentId { get; set; }
    [ForeignKey("DocumentId")] // Should not be needed
    public Document Document { get; set; }
}

如果DocumentStyle是依赖的。

太好了,我错了。它起作用了。我通过了那个错误。然而,现在我遇到了这个问题:“在关系'Document_DocumentStyle'中,角色'Document_DocumentStyle_Source'中的多重性无效。因为从属角色引用了关键属性,所以从属角色的上限多重性必须为1。” - Carlos Blanco
展示你的实体或流畅映射。这看起来像是你试图定义一个不可能存在的单侧可选项。 - Ladislav Mrnka
1
ForeignKey属性只能在定义外键的一侧使用。我猜你的模型中Document是主体,所以请从DocumentStyle属性中移除该属性。 - Ladislav Mrnka
太棒了,你成功了!然而,我在文档实例中引用DocumentStyle时,它是null。 - Carlos Blanco
1
你必须显式加载关系或将导航属性设置为虚拟的。 - Ladislav Mrnka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接