2011-05-13 7 views
5

Tengo dos tablas que ya se han creado. Document y DocumentStyle. Tienen una relación de uno a uno a través de la columna DocumentID. Sin embargo, se llama Id en la tabla Document y DocumentId en la tabla DocumentStyle.Relación uno a uno, nombre de columna de clave diferente, Marco de entidad, primer enfoque de código

Algo como esto

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

Estoy recibiendo el siguiente error en VS

El ForeignKeyAttribute en la propiedad 'documentstyle' en el tipo 'KII.Models.Document' no es válida . El nombre de la clave externa 'DocumentId' era no encontrado en el tipo dependiente 'KII.Models.Document'. El valor Name debe ser una lista separada por comas de nombres de propiedades de claves foráneas.

Esto es parte del código de la clase del modelo de documento

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

EDIT:

Este es el código de mis clases.

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; } 
     //public ImageWrapper Logo { 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; } 

    } 

Respuesta

6

ForeignKey pares de atributos y propiedades de navegación clave de propiedad extranjera. ¡No define la propiedad de la tabla relacionada! Por lo que debe utilizar:

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

si es Document entidad dependiente o:

public class DocumentStyle 
{ 
    public int DocumentId { get; set; } 
    [ForeignKey("DocumentId")] // Should not be needed 
    public Document Document { get; set; } 
} 

si DocumentStyle depende

+0

Grande. Me equivoqué. Lo hizo el truco. Pasé ese error. Sin embargo, ahora tengo este. "La multiplicidad no es válida en Role 'Document_DocumentStyle_Source' en la relación 'Document_DocumentStyle'. Debido a que el rol dependiente se refiere a las propiedades clave, el límite superior de la multiplicidad del rol dependiente debe ser 1" – Omar

+0

Muestre sus entidades o mapeo fluido. Parece que está intentando definir un lado opcional cuando no es posible. –

+1

El atributo ForeignKey debe usarse solo en un lado de la relación donde se define la clave foránea. Supongo que 'Document' es principal en su modelo, así que elimine el atributo de la propiedad' DocumentStyle'. –

Cuestiones relacionadas