Альтернативы соглашения об именовании свойств навигации по внешнему ключу - PullRequest
2 голосов
/ 22 марта 2012

При использовании Entity Framework 4.1, существуют ли альтернативы соглашениям по присвоению имен для свойств навигации?

Например, вместо этого:

public virtual MyObject MyObject { get; set; }

Быть

public virtual MyObject SomeOtherName { get; set; }

UPDATE:

Когда добавляются атрибуты [ForeignKey("OldStepId")] и [ForeignKey("NewStepId")], сгенерированный SQL становится:

{SELECT 
`Extent1`.`CompletedId`, 
`Extent1`.`OldStepId`, 
`Extent1`.`NewStepId`, 
`Extent1`.`Name`, 
`Extent1`.`Step_StepId`, 
`Extent1`.`Step_StepId1` 
FROM `Completed` AS `Extent1`}

которые, последние два столбца не существуют.

Ответы [ 4 ]

4 голосов
/ 22 марта 2012

Вы можете использовать аннотации данных или Fluent API для этого

Способ атрибута

public virtual Int32 MyObjectId{get;set;}
[ForeignKey("MyObjectId")]
public virtual MyObject SomeOtherName { get; set; }

Свободный путь

modelBuilder.Entity<Type>()
    .HasRequired(p => p.SomeOtherName)
    .WithMany(d => d.Type)
    .HasForeignKey(p => p.MyObjectId)

ОТВЕТ НА ОБНОВЛЕНИЕ

Если у вас есть список в вашем классе MyOjbect, то вам нужно пометить этот список как [InverseProperty("SomeOtherName")]. Это может быть причиной того, почему вы получаете дополнительные столбцы в вашем SQL. Это предотвращает дублирование двусторонних отношений, сообщая генератору, где на самом деле находится главный столбец.

1 голос
/ 22 марта 2012

Я обычно называю их тем же именем, что и внешний ключ для Nav Props.

0 голосов
/ 22 марта 2012

Вы можете назвать их как хотите. Необходимо различать свойства навигации, которые имеют (скалярное) свойство внешнего ключа, представленное в классе («Ассоциации внешних ключей»), и свойства навигации, которые не имеют («Независимые ассоциации»):

Ассоциации иностранных ключей :

[ForeignKey("VeryDifferentFKPropertyName")]     // refers to property, NOT column
public virtual MyObject SomeOtherName { get; set; }

[Column("JustAnotherColumnName")]               // map property to column name
public int VeryDifferentFKPropertyName { get; set; }

С Fluent API:

modelBuilder.Entity<SomeEntity>()
    .HasRequired(e => e.SomeOtherName)   // or .HasOptional(...)
    .WithMany()
    .HasForeignKey(e => e.VeryDifferentFKPropertyName);

modelBuilder.Entity<SomeEntity>()
    .Property(e => e.VeryDifferentFKPropertyName)
    .HasColumnName("JustAnotherColumnName");

Независимые ассоциации :

public virtual MyObject SomeOtherName { get; set; }

Вы можете отобразить имя столбца внешнего ключа только с помощью Fluent API:

modelBuilder.Entity<SomeEntity>()
    .HasRequired(e => e.SomeOtherName)   // or .HasOptional(...)
    .WithMany()
    .Map(a => a.MapKey("JustAnotherColumnName"));
0 голосов
/ 22 марта 2012

Если вы добавите шаблон T4 для генерации контента, вы можете в значительной степени настроить схему именования так, как вам захочется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...