Mapping a foreign key with a custom column name Mapping a foreign key with a custom column name oracle oracle

Mapping a foreign key with a custom column name


If you don't want to use fluent syntax, there are three other ways of implementing the reference using data annotations (Personally I prefer data annotations as they seem easier to read and are written just above the property they are affecting):

1.1)Use ForeignKey (with an associated property) - version 1

[Table("WIDGETENTITIES")]public class WidgetEntity {    [Column("WIDGETENTITY_ID")]    public int Id { get; set; }    [Column("WIDGETSEQUENCE_ID")]    public int WidgetSequenceId { get; set; }    [ForeignKey("WidgetSequenceId")] //Has to be a property name, not table column name    public WidgetSequence Sequence { get; set; }    // and other properties that map correctly}[Table("WIDGETSEQUENCES")]public class WidgetSequence {     [Column("WIDGETSEQUENCE_ID")]    public int Id { get; set; }    [Column("NUMBER")]    public int Number { get; set; }}

1.2)Use ForeignKey (with an associated property) - version 2

[Table("WIDGETENTITIES")]public class WidgetEntity {    [Column("WIDGETENTITY_ID")]    public int Id { get; set; }    [ForeignKey("Sequence")] //Has to be a property name, not table column name    [Column("WIDGETSEQUENCE_ID")]    public int WidgetSequenceId { get; set; }    public WidgetSequence Sequence { get; set; }    // and other properties that map correctly}[Table("WIDGETSEQUENCES")]public class WidgetSequence {     [Column("WIDGETSEQUENCE_ID")]    public int Id { get; set; }    [Column("NUMBER")]    public int Number { get; set; }}

2)You can also use the InversePropertyAttribute.

[Table("WIDGETENTITIES")]public class WidgetEntity {    [Column("WIDGETENTITY_ID")]    public int Id { get; set; }    [InverseProperty("WidgetEntities")]    public WidgetSequence Sequence { get; set; }    // and other properties that map correctly}[Table("WIDGETSEQUENCES")]public class WidgetSequence {     [Column("WIDGETSEQUENCE_ID")]    public int Id { get; set; }    [Column("NUMBER")]    public int Number { get; set; }    public virtual List<WidgetEntity> WidgetEntities { get; set; }}


ForeignKey attibute expects a property name in your class as the argument but you given the column name. Use fluent mappings.

protected override void OnModelCreating(DbModelBuilder modelBuilder){    modelBuilder.Entity<WidgetEntity>()     .HasRequired(w => w.Sequence)     .WithMany()     .Map(m => m.MapKey("WIDGETSEQUENCE_ID"));}


There is a table called Users and it has a primary key called UserID.

There is another table called Directory, and it has a column called UserID which is defined as a foreign key to the Users table.

I'm able to use the ForeignKey annotation to map the foreign key like this:

[ForeignKey("xyzzy")]public int? UserID { get; set; }  // This is a column in the tablepublic virtual User xyzzy { get; set; } // This is my instance of User