EF创建额外表

时间:2014-09-18 20:57:31

标签: c# asp.net entity-framework asp.net-mvc-5 asp.net-identity

使用EF6,我创建了一个名为Account的简单POCO来跟踪用户数据:

public class Account
{
    public int ID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    //Others
}

此Account对象是以下DbContext的一部分(为简洁而剥离):

public class MyContext : DbContext
{
    //constructor
    //other DBSets

    public DbSet<Account> Accounts {get;set;}
}

OnModelCreating删除了PluralTableNamesConvention,因此它成功创建了一个名为&#34; Account&#34;具有正确的属性。

我还有ApplicationDbContext,它包含ApplicationUser的以下定义:

public class ApplicationUser : IdentityUser
{
    //GenerateUserIdentityAsync method....

    public virtual Account AccountInfo { get; set; }
}

目的是能够创建用户,然后进行诸如

之类的调用
myStuff.SearchByName(user.AccountInfo.FirstName)

问题: 当我创建用户并且EF生成ASP.net身份表时,它还创建一个名为&#34; Accounts&#34;的表。创建的所有用户都将其信息发送到&#34;帐户&#34;表,而不是原始&#34;帐户&#34;我打算使用的表。

我不确定IdentityDbContext如何强制仅使用原始Account表而不生成自己的。我试过了:

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

但它返回以下内容。任何帮助将不胜感激:)

无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用Code First或Code First Migrations创建的数据库的模型兼容性。

1 个答案:

答案 0 :(得分:0)

好的,所以不确定这是否是一个有效的答案。但是我不久前创建了一个MVC4 / EF5项目并且必须做类似的事情。我使用了WebSecurity Identity Framework或其所谓的(认为现在有一个不同的身份框架)。基本上我所要做的就是在Global.ascx的Application_Start方法中添加几行代码。

// Tells membership provider to use the Baller table too store user profile information
if (!WebSecurity.Initialized)
{
    WebSecurity.InitializeDatabaseConnection("BallSoHardContext", "Baller", "Id", "UserName", autoCreateTables: false);
}

所以我告诉它使用“Baller table”来存储信息。您可能正在使用不同的身份框架,因为您使用的是EF6,但您应该能够在API中找到类似的东西。

My Github project if you want to look through the code.

相关问题