映射到现有数据库表
我Entity Framework 4.1 code first
使用Entity Framework 4.1 code first
连接到现有的数据库。 我首先使用的表叫做Bank
。 我还有一个Bank class
作为我的域模型。 这是我映射我的类和表的方式:
public class HbfContext : DbContext { public DbSet Banks { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().ToTable("Bank"); } }
我的银行表:
BankID INT BankName VARCHAR(50)
我的Bank类看起来像这样:
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吗?
您需要指示EF忽略IsActive
属性并映射其他属性。 如果您不喜欢数据注释,可以使用流畅的API执行此操作:
modelBuilder.Entity().Ignore(b => b.IsActive); modelBuilder.Entity ().Property(b => b.Id).HasColumnName("BankID"); modelBuilder.Entity ().Property(b => b.Name).HasColumnName("BankName");
尝试将以下属性添加到IsActive属性,看看它是否有帮助
[NotMapped]
UPDATE
使用数据注释而不是流畅的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; } }
这将按预期工作
您可以使用System.ComponentModel.DataAnnotations映射属性名称以匹配现有表中的属性名称,例如
[Column("BankID")] [Required] public string Id { get; set; }