使用Entity Framework映射到现有表格

5

当我尝试使用Entity Framework将我的类映射到现有表时,遇到了一些困难。

我的类:

[Table("builder_User")]
public class MobileUser
{
    [Key]
    [Column("id")]
    public int Id { get; set; }
    [Column("beansCount")]
    public int BeansCount { get; set; }
    [Column("bonusSum")]
    public double BonusSum { get; set; }
    [Column("facebookUsername")]
    public string FacebookUserName { get; set; }
    [Column("firstName")]
    public string FirstName { get; set; }
    [Column("lastName")]
    public string LastName { get; set; }
    [Column("guid")]
    public string Guid { get; set; }
    [Column("job")]
    public string Job { get; set; }
    [Column("purchasedSum")]
    public double PurchasedSum { get; set; }
    [Column("facebookId")]
    public string FacebookId { get; set; }

}

我的数据库中的表

enter image description here

DataContext类中,我有:

public DbSet<MobileUser> MobileUsers { get; set; }

但是当我尝试从数据库中获取用户时,我遇到了一个异常

自创建数据库以来,DbContext已更改....

当我运行add-migration命令时,它会生成创建表的命令。

那么我的错误在哪里?谢谢


将您的初始化器设置为null Database.SetInitializer<TContext>(null) 或使用NullDatabaseInitializer。请注意,这将停止EF自动生成您的数据库,因此您必须自己生成它。您可以从这里了解EF中db初始化器的作用。 - Dealdiane
@opiants,是的,在添加了这个语句之后它可以工作了,谢谢! - Ihor Korotenko
@opiants,你应该将这个作为答案写在问题下面,这样它才能被正确关闭,同时你和Ihor都会得到一些积分奖励。 - MBender
1个回答

5

通过调用Database.SetInitializer<TContext>(null)Database.SetInitializer(new NullDatabaseInitializer<TContext>()将初始化器设置为null。

通过将初始化程序设置为null,EF将不再验证数据库架构,并且如果架构更改,将不再创建数据库。您需要在更改架构后自己创建/更新数据库。


我正在尝试了解更多关于这种方法,但不知道该如何称呼它。这是“使用Fluent API的Code First”吗? - Don Cheadle
更具体地说,我想先编写数据库,然后编写干净映射到数据库表的POCO。我不想使用VS数据库项目/EDMX - 我想编写映射/POCO类。但是我似乎找不到这种实践的文档。 - Don Cheadle
我不知道这个确切的名称,但它绝对不叫做“Fluent API”。 “Fluent API”用于配置模式映射。有两种方式可以配置EF:基于属性和基于Fluent API。 "Code First"只是一种开发工作流,与更常见的“基于设计师”的方法相比更加“代码中心化”。如果您需要更多帮助,请创建另一个问题。 - Dealdiane
@mmcrae 是的,你完全可以这样做。Code First 并不意味着你在开始开发时就不应该有一个数据库。这是关于 Code First 的一个普遍误解。你可以创建一个数据库,创建你的 POCO 类,然后使用 fluent api(或属性)来配置上下文以映射到你的数据库。个人而言,我更喜欢使用 fluent api 来映射我的 POCO 类,因为这样我的类就不会被 EF 特定的属性所淹没,这也意味着我可以将我的 POCO 类与 EF 解耦。 - Dealdiane
感谢您的回复。既然您提到了它,我实际上确实提出了一个问题来说明我的困惑:http://stackoverflow.com/questions/34245935/how-to-manually-map-poco-to-existing-table-using-entity-framework - 我认为我在“Fluent API”与“Code First”等方面混淆了。基本上:我不想从Code-First进行迁移,也不想从DB-First获得edmx - 我希望独立于DB创建POCO。而且我不确定该怎么做。 - Don Cheadle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接