使用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创建的数据库的模型兼容性。
答案 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中找到类似的东西。