ASP.NET Identity กับ EF Database First MVC5


88

เป็นไปได้ไหมที่จะใช้ Asp.net Identity ใหม่กับ Database First และ EDMX หรือเฉพาะกับรหัสก่อน?

นี่คือสิ่งที่ฉันทำ:

1) ฉันสร้าง MVC5 Project ใหม่และมี Identity ใหม่สร้างตาราง User และ Roles ใหม่ในฐานข้อมูลของฉัน

2) จากนั้นฉันก็เปิดไฟล์ Database First EDMX ของฉันและลากในตาราง Identity Users ใหม่เนื่องจากฉันมีตารางอื่นที่เกี่ยวข้องกับมัน

3) เมื่อบันทึก EDMX ตัวสร้างฐานข้อมูล POCO แรกจะสร้างคลาส User โดยอัตโนมัติ อย่างไรก็ตาม UserManager และ RoleManager คาดว่าคลาส User ที่สืบทอดมาจาก Identity namespace (Microsoft.AspNet.Identity.IUser) ใหม่ดังนั้นการใช้คลาส POCO User จะไม่ได้ผล

ฉันเดาว่าวิธีแก้ปัญหาที่เป็นไปได้คือการแก้ไข POCO Generation Classes ของฉันเพื่อให้คลาส User ของฉันสืบทอดจาก IUser?

หรือ ASP.NET Identity เข้ากันได้กับ Code First Design เท่านั้น?

++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

อัปเดต: ทำตามคำแนะนำของ Anders Abel ด้านล่างนี่คือสิ่งที่ฉันทำ ได้ผล แต่ฉันสงสัยว่ามีวิธีแก้ปัญหาที่หรูหรากว่านี้หรือไม่

1) ฉันขยายคลาสผู้ใช้เอนทิตีของฉันโดยการสร้างคลาสบางส่วนภายในเนมสเปซเดียวกับเอนทิตีที่ฉันสร้างขึ้นโดยอัตโนมัติ

namespace MVC5.DBFirst.Entity
{
    public partial class AspNetUser : IdentityUser
    {
    }
}

2) ฉันเปลี่ยน DataContext ของฉันเพื่อสืบทอดจาก IdentityDBContext แทน DBContext โปรดทราบว่าทุกครั้งที่คุณอัปเดต EDMX และสร้างคลาส DBContext และ Entity ขึ้นใหม่คุณจะต้องตั้งค่านี้กลับเป็นสิ่งนี้

 public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser>  //DbContext

3) ภายในคลาสเอนทิตีผู้ใช้ที่สร้างขึ้นโดยอัตโนมัติของคุณคุณต้องเพิ่มคีย์เวิร์ดแทนที่ใน 4 ฟิลด์ต่อไปนี้หรือแสดงความคิดเห็นฟิลด์เหล่านี้เนื่องจากฟิลด์เหล่านี้ได้รับการสืบทอดมาจาก IdentityUser (ขั้นตอนที่ 1) โปรดทราบว่าทุกครั้งที่คุณอัปเดต EDMX และสร้างคลาส DBContext และ Entity ขึ้นใหม่คุณจะต้องตั้งค่านี้กลับเป็นสิ่งนี้

    override public string Id { get; set; }
    override public string UserName { get; set; }
    override public string PasswordHash { get; set; }
    override public string SecurityStamp { get; set; }

1
คุณมีโค้ดตัวอย่างของการติดตั้งหรือไม่? เมื่อฉันพยายามจำลองข้อมูลข้างต้นฉันได้รับข้อผิดพลาดเมื่อฉันพยายามเข้าสู่ระบบหรือลงทะเบียนผู้ใช้ "ประเภทเอนทิตี AspNetUser ไม่ได้เป็นส่วนหนึ่งของโมเดลสำหรับบริบทปัจจุบัน" โดยที่ AspNetUser เป็นเอนทิตีผู้ใช้ของฉัน
Tim

คุณได้เพิ่มตาราง AspNetUser ลงใน EDMX ของคุณหรือไม่? นอกจากนี้ตรวจสอบให้แน่ใจว่า AccountController ของคุณกำลังใช้ MVC5Test_DBEntities (หรือบริบท DB ของคุณชื่ออะไร) แทนที่จะเป็น ApplicationContext
Patrick Tran

8
ASP.NET Identity คือกองนึ่งของ ____ การสนับสนุนที่น่ากลัวสำหรับฐานข้อมูลเป็นอันดับแรกไม่มีเอกสารข้อ จำกัด ในการอ้างอิงที่ไม่ดี (ไม่มีใน CASCADE DELETE บนเซิร์ฟเวอร์ SQL) และใช้สตริงสำหรับ ID (ปัญหาด้านประสิทธิภาพและการกระจายตัวของดัชนี) และนี่คือความพยายามครั้งที่ 297 ของพวกเขาในกรอบอัตลักษณ์ ...
DeepSpace101

1
@ DeepSpace101 Identity รองรับ DB-first เหมือนกับ Code-first เทมเพลตได้รับการตั้งค่าให้ทำโค้ดก่อนดังนั้นหากคุณเริ่มจากเทมเพลตคุณต้องเปลี่ยนแปลงบางอย่าง การลบแบบเรียงซ้อนใช้งานได้ดีคุณสามารถเปลี่ยนสตริงเป็น ints ได้อย่างง่ายดาย ดูคำตอบของฉันด้านล่าง
รองเท้า

1
@ รองเท้าฉันต้องบอกว่าฉันคิดว่าคุณอาจจะคิดผิด ฉันยังไม่พบตัวอย่าง / บทช่วยสอนที่ใช้งานได้และครอบคลุมเกี่ยวกับวิธีการใช้งานใน db-first (ไม่มีเอกสารประกอบ) API พยายามอ้างอิงตารางทางแยก "IdentityUserRoles" ผ่านคุณสมบัติ IdentityUser.Roles ซึ่งทำลายความสัมพันธ์บน EF db-first เนื่องจากตารางทางแยกไม่ได้แสดงเป็นเอนทิตี (ข้อ จำกัด การอ้างอิงไม่ดี - ish) ฉันไม่เห็นด้วยเกี่ยวกับสตริงสำหรับ ID เนื่องจากสามารถปรับแต่งได้โดยระบุพารามิเตอร์ type ในคลาสที่สืบทอดมา สรุปแล้วดูเหมือนว่าฉันไม่ได้มี DB มาก่อนเลย
ล่าช้า

คำตอบ:


16

ควรใช้ระบบข้อมูลประจำตัวกับ POCO และฐานข้อมูลก่อน แต่คุณจะต้องปรับแต่งสองสามอย่าง:

  1. อัพเดทไฟล์ .tt สำหรับคนรุ่น POCO partialที่จะทำให้การเรียนกิจการ ซึ่งจะช่วยให้คุณสามารถจัดหาการใช้งานเพิ่มเติมในไฟล์แยกต่างหาก
  2. ดำเนินการบางส่วนของUserคลาสในไฟล์อื่น

 

partial User : IUser
{
}

ซึ่งจะทำให้Userคลาสใช้อินเทอร์เฟซที่ถูกต้องโดยไม่ต้องแตะไฟล์ที่สร้างขึ้นจริง (การแก้ไขไฟล์ที่สร้างขึ้นเป็นความคิดที่ไม่ดีเสมอไป)


ขอบคุณ. ฉันจะต้องลองและรายงานว่ามันได้ผล
Patrick Tran

ฉันลองสิ่งที่คุณพูดถึงแล้ว ดูโพสต์ของฉันสำหรับข้อมูลที่อัปเดต ... แต่วิธีแก้ปัญหาไม่ได้สวยงามมาก: /
Patrick Tran

ฉันมีปัญหาเดียวกัน ดูเหมือนว่าเอกสารเกี่ยวกับ DB-first นั้นเบาบางมาก นี่เป็นคำแนะนำที่ดี แต่ฉันคิดว่าคุณพูดถูกมันไม่ค่อยได้ผล
Phil

4
มีวิธีแก้ปัญหาใดบ้างที่ยังไม่ใช่แฮ็ค?
user20358

ฉันใช้ Onion Architecture และ POCO ทั้งหมดอยู่ใน Core ไม่แนะนำให้ใช้ IUser วิธีแก้ปัญหาอื่น ๆ ?
Usman Khalid

13

ขั้นตอนของฉันคล้ายกันมาก แต่ฉันต้องการแบ่งปัน

1) สร้างโครงการ MVC5 ใหม่

2) สร้าง Model.edmx ใหม่ แม้ว่าจะเป็นฐานข้อมูลใหม่และไม่มีตารางก็ตาม

3) แก้ไข web.config และแทนที่ connectionstring ที่สร้างขึ้นนี้:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-SSFInventory-20140521115734.mdf;Initial Catalog=aspnet-SSFInventory-20140521115734;Integrated Security=True" providerName="System.Data.SqlClient" />

ด้วย connectionstring นี้:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;database=SSFInventory;integrated security=true;" providerName="System.Data.SqlClient" />

หลังจากนั้นสร้างและเรียกใช้แอปพลิเคชัน ลงทะเบียนผู้ใช้จากนั้นตารางจะถูกสร้างขึ้น


1
สิ่งนี้แก้ปัญหาได้ฉันไม่เห็นผู้ใช้แอปพลิเคชันในฐานข้อมูล แต่หลังจากเปลี่ยนการเชื่อมต่อเริ่มต้นแล้วก็ใช้งานได้
Hassen Ch.

10

แก้ไข: ASP.NET Identity with EF Database First for MVC5 CodePlex Project Template


ฉันต้องการใช้ฐานข้อมูลที่มีอยู่และสร้างความสัมพันธ์กับ ApplicationUser นี่เป็นวิธีที่ฉันทำโดยใช้ SQL Server แต่แนวคิดเดียวกันนี้อาจใช้ได้กับ DB ใด ๆ

  1. สร้างโครงการ MVC
  2. เปิด DB ที่แสดงรายการภายใต้ DefaultConnection ใน Web.config จะถูกเรียกว่า (aspnet- [timestamp] หรืออะไรทำนองนั้น)
  3. เขียนสคริปต์ตารางฐานข้อมูล
  4. แทรกตารางที่มีสคริปต์ลงในฐานข้อมูลที่มีอยู่ใน SQL Server Management Studio
  5. ปรับแต่งและเพิ่มความสัมพันธ์กับApplicationUser (ถ้าจำเป็น)
  6. สร้าง Web Project ใหม่> MVC> DB First Project> นำเข้า DB ด้วย EF ... ไม่รวมคลาส Identity ที่คุณแทรก
  7. ในIdentityModels.csเปลี่ยน ApplicationDbContext :base("DefaltConnection")เพื่อใช้ DbContext ของโปรเจ็กต์ของคุณ

แก้ไข: Asp.Net Identity Class Diagram ป้อนคำอธิบายภาพที่นี่


6
ปัญหาไม่ใช่ DBContext แต่ UserManager และ RoleManager คาดว่าคลาสที่สืบทอดมาจาก Microsoft.AspNet.Identity.EntityFramework.IdentityUser
Patrick Tran

คลาสสาธารณะ IdentityDbContext <TUser>: DbContext โดยที่ TUser: Microsoft.AspNet.Identity.EntityFramework.IdentityUser เมื่อใช้ฐานข้อมูลก่อนคลาสเอนทิตีที่สร้างขึ้นจะไม่สืบทอดจากคลาสพื้นฐานใด ๆ
Patrick Tran

จากนั้นให้แยกออกจากฐานข้อมูลเมื่อคุณสร้างคลาสด้วยเอนทิตีเฟรมเวิร์ก
เหม็น

หากคุณแยกตาราง Identity ออกจาก EDMX คุณจะสูญเสียคุณสมบัติการนำทางในคลาสอื่น ๆ ที่มีคีย์แปลกปลอมไปยัง UserID ของคุณ
Patrick Tran

35
ฉันไม่ลังเลที่จะย้ายไปใช้โค้ดก่อน ... ในบางสถานการณ์และบาง บริษัท ผู้ดูแลระบบฐานข้อมูลจะสร้างตารางพื้นฐานไม่ใช่โค้ดเดอร์
Patrick Tran

8

IdentityUserที่นี่ไม่มีค่าเพราะเป็นวัตถุรหัสแรกที่ใช้UserStoreสำหรับการตรวจสอบสิทธิ์ หลังจากกำหนดUserอ็อบเจ็กต์ของตัวเองแล้วฉันใช้คลาสบางส่วนที่ใช้IUserซึ่งUserManagerคลาสนี้ใช้ ฉันต้องการให้Ids ของฉันเป็นintแทนที่จะเป็นสตริงดังนั้นฉันจึงส่งคืน UserID ของ toString () ในทำนองเดียวกันผมอยากnในการUsernameที่จะเป็น uncapitalized

public partial class User : IUser
{

    public string Id
    {
        get { return this.UserID.ToString(); }
    }

    public string UserName
    {
        get
        {
            return this.Username;
        }
        set
        {
            this.Username = value;
        }
    }
}

IUserคุณโดยไม่จำเป็น เป็นเพียงอินเทอร์เฟซที่ใช้โดยไฟล์UserManager. ดังนั้นหากคุณต้องการกำหนด "IUser" อื่นคุณจะต้องเขียนคลาสนี้ใหม่เพื่อใช้การนำไปใช้งานของคุณเอง

public class UserManager<TUser> : IDisposable where TUser: IUser

ขณะนี้คุณเขียนของคุณเองUserStoreซึ่งมีหน้าที่จัดการทั้งหมดของการจัดเก็บข้อมูลของผู้ใช้, การเรียกร้องบทบาท ฯลฯ ใช้อินเตอร์เฟซของทุกอย่างที่รหัสแรกUserStoreไม่และการเปลี่ยนแปลงwhere TUser : IdentityUserการwhere TUser : Userที่ "ผู้ใช้" เป็นวัตถุนิติบุคคลของคุณ

public class MyUserStore<TUser> : IUserLoginStore<TUser>, IUserClaimStore<TUser>, IUserRoleStore<TUser>, IUserPasswordStore<TUser>, IUserSecurityStampStore<TUser>, IUserStore<TUser>, IDisposable where TUser : User
{
    private readonly MyAppEntities _context;
    public MyUserStore(MyAppEntities dbContext)
    { 
        _context = dbContext; 
    }

    //Interface definitions
}

นี่คือตัวอย่างสองสามตัวอย่างเกี่ยวกับการใช้งานอินเทอร์เฟซบางส่วน

async Task IUserStore<TUser>.CreateAsync(TUser user)
{
    user.CreatedDate = DateTime.Now;
    _context.Users.Add(user);
    await _context.SaveChangesAsync();
}

async Task IUserStore<TUser>.DeleteAsync(TUser user)
{
    _context.Users.Remove(user);
    await _context.SaveChangesAsync();
}

ใช้เทมเพลต MVC 5 ฉันเปลี่ยนเป็นAccountControllerแบบนี้

public AccountController()
        : this(new UserManager<User>(new MyUserStore<User>(new MyAppEntities())))
{
}

ตอนนี้การเข้าสู่ระบบควรใช้กับตารางของคุณเอง


1
ฉันเพิ่งมีโอกาสใช้สิ่งนี้และด้วยเหตุผลบางประการ (ฉันเชื่อว่าเป็นเพราะการอัปเดตข้อมูลประจำตัว 3.0) ฉันไม่สามารถใช้การเข้าสู่ระบบโดยการสืบทอด IdentityUser จากนั้นจึงแทนที่คุณสมบัตินั้น แต่การเขียน UserStore แบบกำหนดเองและการสืบทอด IUser ทำงานได้ดี เพียงแค่ให้การอัปเดตอาจมีคนพบว่าสิ่งนี้มีประโยชน์
Naz Ekin

คุณสามารถให้ลิงค์สำหรับการใช้งานอินเทอร์เฟซทั้งหมดหรือสำหรับโครงการแบบเต็มได้หรือไม่?
DespeiL

มีเหตุผลที่เฉพาะเจาะจงว่าทำไมคุณถึงใช้คลาสบางส่วนที่นี่?
user8964654

หากคุณใช้ edmx เพื่อสร้างโมเดลของคุณคุณต้องใช้คลาสบางส่วน หากคุณกำลังทำโค้ดก่อนคุณอาจละเว้นสิ่งนี้
รองเท้า

3

ดูโครงการนี้บน GitHub: https://github.com/KriaSoft/AspNet.Identity

ซึ่งรวมถึง:

  • เทมเพลตโครงการฐานข้อมูล SQL สำหรับ ASP.NET Identity 2.0
  • Entity Framework Database-First Provider (s)
  • ซอร์สโค้ดและตัวอย่าง

ป้อนคำอธิบายภาพที่นี่

ดูเพิ่มเติมที่ : วิธีสร้างผู้ให้บริการ Database-First สำหรับ ADO.NET Identity


3

คำถามที่ดี.

ฉันเป็นคนที่ใช้ฐานข้อมูลเป็นอันดับแรก กระบวนทัศน์แรกของรหัสดูเหมือนจะทำให้ฉันขนลุกและ "การโยกย้าย" ดูเหมือนจะผิดพลาดมากเกินไป

ฉันต้องการปรับแต่งสคีมาข้อมูลประจำตัวของแอสเน็ตและไม่ต้องกังวลกับการย้ายข้อมูล ฉันมีความเชี่ยวชาญกับโครงการฐานข้อมูล Visual Studio (sqlpackage, data-dude) เป็นอย่างดีและมันทำงานได้ดีแค่ไหนในการอัปเกรดสคีมา

วิธีง่ายๆของฉันคือ:

1) สร้างโปรเจ็กต์ฐานข้อมูลที่มิเรอร์สคีมาเอกลักษณ์ของแอสเน็ต 2) ใช้เอาต์พุตของโปรเจ็กต์นี้ (.dacpac) เป็นทรัพยากรโปรเจ็กต์ 3) ปรับใช้. dacpac เมื่อจำเป็น

สำหรับ MVC5 การปรับเปลี่ยนApplicationDbContextคลาสดูเหมือนจะดำเนินต่อไป ...

1) ดำเนินการ IDatabaseInitializer

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IDatabaseInitializer<ApplicationDbContext> { ... }

2) ในตัวสร้างสัญญาณว่าคลาสนี้จะใช้การเริ่มต้นฐานข้อมูล:

Database.SetInitializer<ApplicationDbContext>(this);

3) ดำเนินการInitializeDatabase:

ที่นี่ฉันเลือกใช้ DacFX และปรับใช้. dacpac

    void IDatabaseInitializer<ApplicationDbContext>.InitializeDatabase(ApplicationDbContext context)
    {
        using (var ms = new MemoryStream(Resources.Binaries.MainSchema))
        {
            using (var package = DacPackage.Load(ms, DacSchemaModelStorageType.Memory))
            {
                DacServices services = new DacServices(Database.Connection.ConnectionString);
                var options = new DacDeployOptions
                {
                    VerifyDeployment = true,
                    BackupDatabaseBeforeChanges = true,
                    BlockOnPossibleDataLoss = false,
                    CreateNewDatabase = false,
                    DropIndexesNotInSource = true,
                    IgnoreComments = true,

                };
                services.Deploy(package, Database.Connection.Database, true, options);
            }
        }
    }

2

ผมใช้เวลาหลายชั่วโมงในการทำงานผ่านทางนี้และในที่สุดก็พบวิธีแก้ปัญหาที่ฉันได้ใช้ร่วมกันบนบล็อกของฉันที่นี่ โดยพื้นฐานแล้วคุณต้องทำทุกอย่างที่กล่าวด้วยคำตอบที่เหม็นแต่มีสิ่งเพิ่มเติมอีกอย่างหนึ่งนั่นคือการตรวจสอบให้แน่ใจว่า Identity Framework มีสตริงการเชื่อมต่อ SQL-Client เฉพาะที่ด้านบนของสตริงการเชื่อมต่อ Entity Framework ที่ใช้สำหรับเอนทิตีแอปพลิเคชันของคุณ

โดยสรุปแอปพลิเคชันของคุณจะใช้สตริงการเชื่อมต่อสำหรับ Identity Framework และอีกชุดสำหรับเอนทิตีแอปพลิเคชันของคุณ สตริงการเชื่อมต่อแต่ละสายเป็นประเภทที่แตกต่างกัน อ่านบล็อกโพสต์ของฉันเพื่อดูบทแนะนำแบบเต็ม


ฉันลองทุกอย่างที่คุณพูดถึงในบล็อกของคุณสองครั้ง แต่ก็ไม่ได้ผลสำหรับฉัน
Badhon Jain

@Badhon ฉันขอโทษมากที่คำแนะนำในบล็อกโพสต์ของฉันไม่ได้ผลสำหรับคุณ ฉันมีผู้คนนับไม่ถ้วนแสดงความขอบคุณเนื่องจากพวกเขาประสบความสำเร็จจากบทความของฉัน โปรดจำไว้เสมอว่าหาก Microsoft อัปเดตบางสิ่งอาจส่งผลต่อผลลัพธ์ได้ ฉันเขียนบทความสำหรับ ASP.NET MVC 5 ด้วย Identity Framework 2.0 สิ่งที่นอกเหนือไปจากนั้นอาจประสบปัญหา แต่จนถึงตอนนี้ฉันได้รับความคิดเห็นล่าสุดที่ระบุว่าประสบความสำเร็จ ฉันอยากทราบข้อมูลเพิ่มเติมเกี่ยวกับปัญหาของคุณ
Daniel Eagle

ฉันจะพยายามติดตามอีกครั้งปัญหาที่ฉันประสบคือฉันไม่สามารถใช้ฐานข้อมูลที่กำหนดเองได้มันใช้ฐานข้อมูลที่สร้างขึ้นโดยอัตโนมัติ อย่างไรก็ตามฉันไม่ได้ตั้งใจจะพูดอะไรผิดกับบทความของคุณ ขอบคุณสำหรับการแบ่งปันความรู้ของคุณ
Badhon Jain

1
@Badhon ไม่ต้องห่วงเพื่อนฉันไม่เคยรู้สึกว่าคุณพูดอะไรผิดกับบทความ เราทุกคนมีสถานการณ์ที่ไม่เหมือนใครและมีกรณีต่างๆมากมายดังนั้นบางครั้งสิ่งที่เหมาะกับคนอื่นอาจไม่ได้ผลสำหรับเรา ฉันหวังว่าคุณจะสามารถแก้ปัญหาของคุณได้
Daniel Eagle

2

ฉันพบว่า @ JoshYates1980 มีคำตอบที่ง่ายที่สุด

หลังจากการทดลองชุดและข้อผิดพลาดฉันได้ทำตามที่ Josh แนะนำและแทนที่connectionStringด้วยสตริงการเชื่อมต่อ DB ที่ฉันสร้างขึ้น สิ่งที่ฉันสับสนในตอนแรกคือโพสต์ต่อไปนี้:

วิธีการเพิ่ม ASP.NET MVC5 Identity Authentication ไปยังฐานข้อมูลที่มีอยู่

โดยที่คำตอบที่ยอมรับจาก @Win ระบุว่าให้เปลี่ยนApplicationDbContext()ชื่อการเชื่อมต่อ นี่เป็นเพียงเล็กน้อยที่คลุมเครือหากคุณใช้เอนทิตีและฐานข้อมูล / โมเดลแนวทางแรกที่สร้างสตริงการเชื่อมต่อฐานข้อมูลและเพิ่มลงในWeb.configไฟล์

ApplicationDbContext()ชื่อการเชื่อมต่อแมปกับการเชื่อมต่อค่าเริ่มต้นในWeb.configไฟล์ ดังนั้นวิธีการของ Josh จึงทำงานได้ดีที่สุด แต่เพื่อให้ApplicationDbContext()อ่านได้ง่ายขึ้นฉันขอแนะนำให้เปลี่ยนชื่อเป็นชื่อฐานข้อมูลของคุณตามที่ @Win โพสต์ครั้งแรกตรวจสอบให้แน่ใจว่าได้เปลี่ยนconnectionString"DefaultConnection" ในWeb.configและแสดงความคิดเห็นและ / หรือลบเอนทิตี ฐานข้อมูลที่สร้างขึ้น ได้แก่

ตัวอย่างโค้ด:


1

เรามีโปรเจ็กต์ Entity Model DLL ที่เราเก็บคลาสโมเดลไว้ เรายังเก็บโครงการฐานข้อมูลไว้ด้วยสคริปต์ฐานข้อมูลทั้งหมด แนวทางของฉันมีดังนี้

1) สร้างโครงการของคุณเองที่มี EDMX โดยใช้ฐานข้อมูลก่อน

2) เขียนสคริปต์ตารางในฐานข้อมูลของคุณฉันใช้ VS2013 ที่เชื่อมต่อกับ localDB (การเชื่อมต่อข้อมูล) และคัดลอกสคริปต์ไปยังโครงการฐานข้อมูลเพิ่มคอลัมน์ที่กำหนดเองเช่น BirthDate [DATE] ไม่ใช่ null

3) ปรับใช้ฐานข้อมูล

4) อัปเดตโครงการ Model (EDMX) เพิ่มในโครงการ Model

5) เพิ่มคอลัมน์ที่กำหนดเองลงในคลาสแอปพลิเคชัน

public class ApplicationUser : IdentityUser
{
    public DateTime BirthDate { get; set; }
}

ในโครงการ MVC AccountController เพิ่มสิ่งต่อไปนี้:

ผู้ให้บริการข้อมูลประจำตัวต้องการสตริงการเชื่อมต่อ SQL เพื่อให้ใช้งานได้เพื่อเก็บสตริงการเชื่อมต่อเพียง 1 สตริงสำหรับฐานข้อมูลแยกสตริงผู้ให้บริการออกจากสตริงการเชื่อมต่อ EF

public AccountController()
{
   var connection = ConfigurationManager.ConnectionStrings["Entities"];
   var entityConnectionString = new EntityConnectionStringBuilder(connection.ConnectionString);
        UserManager =
            new UserManager<ApplicationUser>(
                new UserStore<ApplicationUser>(
                    new ApplicationDbContext(entityConnectionString.ProviderConnectionString)));
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.