【问题标题】:Add table to Code-First ASP.NET app with Identity使用 Identity 将表添加到 Code-First ASP.NET 应用程序
【发布时间】:2016-10-29 20:27:29
【问题描述】:

我有一个使用 MVC 模板创建的 ASP.NET 应用程序,其中 Identity 设置为单个用户帐户。这意味着我有一个用于身份的 DbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

我有一个看起来像这样的本地数据库

我想在我的架构中添加一个新表来存储信用卡信息。该表将被命名为 dbo.CreditCards,并将包含三列,ID int、UserName varchar(128)、cardNumber char(16)、expirationDate 日期和 CVV char(3)。如何修改此上下文以创建包含此架构中的这些列的表?

【问题讨论】:

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


    【解决方案1】:

    代码优先意味着当你想添加一些东西时,你首先将它添加到你的代码中。

    • 为信用卡信息添加一个类。
    • 定义类属性 ID、UserName 和 CardNumber
    • public DbSet&lt;CreditCardInfo&gt; CreditCards { get; set; } 添加到ApplicationDbContext
    • 您的项目已启用迁移,因为您使用身份和身份启用迁移
    • 使用 Add-Migration AnyName 从包管理器控制台添加新迁移
    • 更新数据库以再次使用 Update-Datebase 反映来自包管理器控制台的迁移

    您可以参考此tutorial 以获得更详细的演练。

    【讨论】:

    • NuGet 控制台称为包管理器控制台
    • 是的,这就是实际名称。我已经编辑得更清楚了。谢谢。
    • 你也可以将你的类属性映射到你的列名,以防你不想拥有相同的属性名和列名
    【解决方案2】:

    使用实体框架是最简单的事情。您可以通过查看 StackOverflow 中 EntityFramework 标签 here 的 Info 部分学到很多东西。您可以阅读这些书籍或访问其中列出的网站。

    要回答您的问题,只需像这样创建CreditCard 实体:

    public class CreditCard
    {
        public int Id { get; set; }
    
        [StringLength(128)]
        public string UserName { get; set; }
    
        [MinLength(16), MaxLength(16)]
        [Column(TypeName = "CHAR")]
        public string CardNumber { get; set; }
    
        [Column(TypeName = "DATE")]
        public DateTime ExpirationDate { get; set; }
    
        [MinLength(3), MaxLength(3)]
        [Column(TypeName = "CHAR")]
        public string CVV { get; set; }
    }
    

    而您的DbContext 只需添加一个名为CreditCards 的新属性,其类型为DbSet&lt;CreditCard&gt;

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
    
        public DbSet<CreditCard> CreditCards { get; set; }        
    
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }
    

    如果您重新创建或更新数据库,您将拥有该表。

    【讨论】:

    • 似乎这应该可行,但我收到此错误索引'PK_dbo.CreditCards'行长度超过'8060'字节的最大允许长度。无法创建约束或索引。查看以前的错误。
    • 很奇怪,注释掉最后一个属性修复它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2014-05-31
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多