EF4 Code-First CTP5 Много-к-одному - PullRequest
2 голосов
/ 01 января 2011

Я пытался заставить EF4 CTP5 хорошо играть с существующей базой данных, но боролся с некоторыми базовыми проблемами отображения.

У меня есть два класса моделей:

public class Job
{
    [Key, Column(Order = 0)]
    public int JobNumber { get; set; }
    [Key, Column(Order = 1)]
    public int VersionNumber { get; set; }

    public virtual User OwnedBy { get; set; }
}

и

[Table("Usernames")]
public class User
{
    [Key]
    public string Username { get; set; }

    public string EmailAddress { get; set; }

    public bool IsAdministrator { get; set; }
}

И у меня есть класс DbContext, который выставляет их как IDbSet

. Я могу запрашивать своих пользователей, но как только я добавил поле OwnedBy в класс Job, я начал получать этоошибка во всех моих тестах для заданий:

Неверное имя столбца 'UserUsername'.

Я хочу, чтобы это работало как много-к-одному NHibernate, тогда как я думаюEF4 рассматривает это как сложный тип.Как это сделать?

Ответы [ 2 ]

4 голосов
/ 02 января 2011

UserUsername - это имя по умолчанию, которое EF Code First выбирает для внешнего ключа в таблице Jobs. Очевидно, это не то же имя, что ваша существующая база данных для столбца FK в таблице Jobs. Вам необходимо переопределить это соглашение и изменить имя FK по умолчанию, чтобы оно соответствовало вашей базе данных. Вот как это делается с помощью свободного API:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Job>()
                .HasOptional(j => j.OwnedBy)
                .WithMany()
                .IsIndependent()
                .Map(m => m.MapKey(u => u.Username, "TheFKNameInYourDB"));
}
0 голосов
/ 01 января 2011

Попробуйте позволить ему создать новую базу данных из вашей схемы и посмотрите, какой столбец он ожидает.

Я думаю, что его первоочередной ключ для OwnedBy. Он пытается назвать его в соответствии с его внутренним соглашением, что несовместимо с тем, как вы назвали свой ключевой столбец. И нет, это действительно относится ко многим к одному.

...