Сопоставление с уже существующей таблицей базы данных - PullRequest
3 голосов
/ 13 января 2012

Я использую Entity Framework 4.1 code first для подключения к уже существующей базе данных.Таблица, которую я использую первой, называется Bank.У меня также есть Bank class в качестве модели моего домена.Вот как я сопоставил свой класс и таблицу:

public class HbfContext : DbContext
{
     public DbSet<Bank> Banks { get; set; }

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
          modelBuilder.Entity<Bank>().ToTable("Bank");
     }
}

Таблица моего банка:

BankID INT
BankName VARCHAR(50)

Класс моего банка выглядит так:

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

возникли проблемы, когда я хочу вернуть все банки.Оператор SQL, возвращаемый из:

return db.Banks
     .OrderBy(x => x.Name);

:

SELECT
     [Extent1].[Id] AS [Id],
     [Extent1].[Name] AS [Name],
     [Extent1].[IsActive] AS [IsActive]
FROM
     [dbo].[Bank] AS [Extent1]
ORDER BY
     [Extent1].[Name] ASC

Это не сработает, поскольку в моей таблице нет столбцов Id, Name и IsActive.Как бы это исправить и EF автоматически сопоставил бы BankId с Id и BankName с именем?

Ответы [ 3 ]

5 голосов
/ 13 января 2012

Вы должны указать EF игнорировать свойство IsActive и отобразить другие свойства.Если вам не нравятся аннотации данных, вы можете сделать это с помощью свободного API:

modelBuilder.Entity<Bank>().Ignore(b => b.IsActive);
modelBuilder.Entity<Bank>().Property(b => b.Id).HasColumnName("BankID");
modelBuilder.Entity<Bank>().Property(b => b.Name).HasColumnName("BankName");
2 голосов
/ 13 января 2012

Попробуйте добавить следующий атрибут в свойство IsActive и посмотрите, поможет ли это

[NotMapped]

ОБНОВЛЕНИЕ

Использование аннотаций данных вместо плавного API, который прощепонять и использовать IMO

Прежде всего удалите функцию OnModelCreating из вашего контекстного класса

Затем определите свою модель следующим образом:

[Table("Bank")]
public class Bank
{
    [key]
    public int Id { get; set; }
    [Column("BankName")]
    public string Name { get; set; }
    [NotMapped]
    public bool IsActive { get; set; }
}

Это должно работать как ожидалось

0 голосов
/ 13 января 2012

Вы можете использовать System.ComponentModel.DataAnnotations, чтобы сопоставить имена свойств с соответствующими именами в существующей таблице, например,

    [Column("BankID")]
    [Required]
    public string Id
        {
        get;
        set;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...