用户注册时如何将数据保存到数据库中,即如何记住他在数据库中注册的数据?(给出错误) [英] How to save data to the database when the user registers, ie how to remember the data with which he registered in the database? (Give error)

查看:32
本文介绍了用户注册时如何将数据保存到数据库中,即如何记住他在数据库中注册的数据?(给出错误)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<块引用>

用户.cs:此类中出现以下错误:Severity Code Description Project File Line Suppression >状态错误 CS0119 'User' 是一种类型,在给定的上下文 TestBlazor C:\ ...在那里我尝试在用户注册时保存数据.

使用系统;使用 System.Collections.Generic;使用 System.Linq;使用 System.Threading.Tasks;使用 TestBlazor.Models;命名空间 TestBlazor.Data{公开课用户{public static void AddUsers(){使用 (var context = new AppDbContext()){//var user = new User { Url = "";};//这是什么?context.User.Add(用户);//这个错误context.SaveChanges();}}}}

<块引用>

这里我将模型链接到数据库.我得到的表(用户)是空的.AppDbContext.cs:

使用 Microsoft.EntityFrameworkCore;使用系统;使用 System.Collections.Generic;使用 System.Linq;使用 System.Threading.Tasks;使用 TestBlazor.Models;命名空间 TestBlazor.Data{公共类 AppDbContext : DbContext{公共 AppDbContext(){}公共 AppDbContext(DbContextOptions<AppDbContext> options) : base(options){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){如果(!optionsBuilder.IsConfigured){optionsBuilder.UseSqlServer("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;");}}//protected override void OnModelCreating(ModelBuilder modelBuilder)//{//base.OnModelCreating(modelBuilder);//modelBuilder.Entity()//}公共数据库集<用户>用户{获取;放;}公共 DbSet项目{得到;放;}}}

<块引用>

这是模型(用户):用户.cs

 [表(用户")]公共类用户{[显示(AutoGenerateField = false)]公共 int UserId { 获取;放;}[显示(名称=用户名")][必需(ErrorMessage =需要用户名.")]公共字符串用户名 { 获取;放;}[显示(名称=密码")][必需的][MinLength(8, ErrorMessage = "密码必须至少为 8 个字符")][数据类型(数据类型.密码)]公共字符串密码{获取;放;}[显示(名称=电子邮件")][必需(ErrorMessage =需要电子邮件.")]公共字符串电子邮件{获取;放;}[显示(名称=公司")][字符串长度(255)][必需(ErrorMessage =需要公司.")][Remote("doesCompanyExist", "Company", HttpMethod = "POST", ErrorMessage = "Company already exists. Please enter a different company.")]公共字符串 Company { get;放;}公共用户 GetRegisteredUser(){返回新用户{用户名 = 用户名,密码 = 密码,电子邮件 = 电子邮件,公司 = 公司,};}}

<块引用>

这是注册布局:注册.razor:

@page /register";@using TestBlazor.Models<br/><br/><h3><b>注册</b></h3><br/><EditForm class="needs-validation";模型=@_user"OnValidSubmit="@HandleValidSubmit";OnInvalidSubmit=@HandleInvalidSubmit"><div class="alert @StatusClass">@StatusMessage</div><DataAnnotationsValidator/><验证摘要/><div class="form-group"><p><b>用户名</b></p>

<div class="form-group"><p><b>密码</b></p><输入类型=密码"类=固体"id="密码"placeholder="您的密码..";@bind-value=_user.Password";/><ValidationMessage For="@(() =>@_user.Password)"></ValidationMessage>

<div class="form-group"><p><b>电子邮件</b></p><input id="email";类=固体"placeholder="you@example.com";@bind-value="_user.Email";/><ValidationMessage For="@(() =>@_user.Email)"></ValidationMessage>

<div class="form-group"><p><b>公司</b></p><输入id=公司"类=固体"placeholder =您的公司.."@bind-value=_user.Company";/><ValidationMessage For="@(() =>@_user.Company)"></ValidationMessage>

<br/><按钮禁用=@loading";class=btn btn-primary">@if(加载){<span class="spinner-border spinner-border-sm mr-1"></span><NavLink href="/login";class=btn btn-link">注册}登记<NavLink href="/login";class=btn btn-link">登录</EditForm>@代码 {私人用户 _user = 新用户();私有字符串 StatusMessage;私有字符串 StatusClass;私人布尔加载;私有无效 OnValidSubmit(){如果(加载 == 真){Console.WriteLine(您已成功注册!");}别的{加载 = 假;Console.WriteLine(再次检查您的信息!");}}受保护的无效 HandleValidSubmit(){StatusClass =警报信息";状态消息 = "您已经成功注册了!请点击登录按钮登录!";}受保护的无效 HandleInvalidSubmit(){StatusClass = "alert-danger";状态消息 = "再次检查您的信息!";}public bool doCompanyExist(string Company){尝试{如果(公司!= null){返回真;}}捕获(异常){返回假;}返回假;}}

解决方案

我认为您的问题是您试图通过实体框架将 User(一个类)添加到 User 表中.您应该取消注释这一行 //var user = new User { Url = "";};//这是什么? 并修改这一行 context.User.Add(User); 通过将 user 传递给它.所以,它可能看起来像这样.

using (var context = new AppDbContext()){var user = new User { Url = "";};上下文.用户.添加(用户);context.SaveChanges();}

我什至没有看你所有的其他代码.

我不认为 UrlUser 的属性,所以我不确定您为什么要尝试初始化新的 UserUrl.但是假设你正确地初始化了一个 User 的实例(我指的是代码行 var user = new User { ... }; 你应该能够使用.Add() 方法通过 EF 将其添加到 User 表中.

User.cs: The following error occurs in this class: Severity Code Description Project File Line Suppression > State Error CS0119 'User' is a type, which is not valid in the given context TestBlazor C: \ ... There I tried to save the data when the user registers.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TestBlazor.Models;

namespace TestBlazor.Data
{
    public class Users
    {
        public static void AddUsers()
        {
            using (var context = new AppDbContext())
            {
                //var user = new User { Url = "" }; //what this?
                context.User.Add(User); //this error
                context.SaveChanges();
            }
        }
    }
}

Here I linked the Model to the database. I get the table (Users) empty. AppDbContext.cs:

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TestBlazor.Models;

namespace TestBlazor.Data
{
    public class AppDbContext : DbContext
    {
        public AppDbContext()
        {

        }

        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;");
            }
        }

        //protected override void OnModelCreating(ModelBuilder modelBuilder)
        //{
        //    base.OnModelCreating(modelBuilder);
        //    modelBuilder.Entity<User>()
        //}

        public DbSet<User> User { get; set; }
        public DbSet<Item> Items { get; set; }


    }

}

Here is the Model (User): User.cs

 [Table("Users")]
    public class User
    {
        [Display(AutoGenerateField = false)]
        public int UserId { get; set; }

        [Display(Name = "UserName")]
        [Required(ErrorMessage = "UserName is required.")]
        public string UserName { get; set; }

        [Display(Name = "Password")]
        [Required]
        [MinLength(8, ErrorMessage = "password must be atleast 8 characters")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Display(Name = "Email")]
        [Required(ErrorMessage = "Email is required.")]
        public string Email { get; set; }

        [Display(Name = "Company")]
        [StringLength(255)]
        [Required(ErrorMessage = "Company is required.")]
        [Remote("doesCompanyExist", "Company", HttpMethod = "POST", ErrorMessage = "Company already exists. Please enter a different company.")]
        public string Company { get; set; }

        public User GetRegisteredUser()
        {
            return new User
            {
                UserName = UserName,
                Password = Password,
                Email = Email,
                Company = Company,

            };
        }

    }

Here is the registration layout: Register.razor:

@page "/register"

@using TestBlazor.Models

<br />
<br />

<h3><b>Register</b></h3>
<br />

<EditForm class="needs-validation" Model="@_user" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit">
    <div class="alert @StatusClass">@StatusMessage</div>
    <DataAnnotationsValidator />
    <ValidationSummary />
    <div class="form-group">
        <p><b>User name</b></p>
        <input id="username" class="solid" name="username" placeholder="Your username.." @bind-value="_user.UserName" />
        <ValidationMessage For="@(() => @_user.UserName)"></ValidationMessage>
    </div>
    <div class="form-group">
        <p><b>Password</b></p>
        <input type="password" class="solid" id="password" placeholder="Your password.." @bind-value="_user.Password" />
        <ValidationMessage For="@(() => @_user.Password)"></ValidationMessage>
    </div>
    <div class="form-group">
        <p><b>Email</b></p>
        <input id="email" class="solid" placeholder="you@example.com" @bind-value="_user.Email" />
        <ValidationMessage For="@(() => @_user.Email)"></ValidationMessage>
    </div>
    <div class="form-group">
        <p><b>Company</b></p>
        <input id="company" class="solid" placeholder="Your company.." @bind-value="_user.Company" />
        <ValidationMessage For="@(() => @_user.Company)"></ValidationMessage>
    </div>


    <br />

    <button disabled="@loading" class="btn btn-primary">

        @if (loading)
        {
            <span class="spinner-border spinner-border-sm mr-1"></span>
            <NavLink href="/login" class="btn btn-link">Register</NavLink>
        }
        Register
    </button>
    <NavLink href="/login" class="btn btn-link">Login</NavLink>
</EditForm>



@code {
    private User _user = new User();

    private string StatusMessage;
    private string StatusClass;

    private bool loading;


    private void OnValidSubmit()
    {
        if (loading == true)
        {
            Console.WriteLine("You have successfully registered!");
        }

        else
        {
            loading = false;
            Console.WriteLine("Check your information again!");
        }
    }

    protected void HandleValidSubmit()
    {
        StatusClass = "alert-info";
        StatusMessage = " You have successfully registered! Please click the Login button to log in!";
    }

    protected void HandleInvalidSubmit()
    {
        StatusClass = "alert-danger";
        StatusMessage = " Check your information again!";
    }


    public bool doesCompanyExist(string Company)
    {
        try
        {

            if (Company != null)
            {
                return true;
            }

        }
        catch (Exception)
        {
            return false;
        }

        return false;

    }

}

解决方案

I think your problem is that you are trying to add User, which is a class, to the User table via entity framework. You should uncomment this line //var user = new User { Url = "" }; //what this? and modify this line context.User.Add(User); by passing user into it instead. So, it might look like this.

using (var context = new AppDbContext())
{
    var user = new User { Url = "" };
    context.User.Add(user);
    context.SaveChanges();
}

I didn't even look at all of your other code.

edit: I don't see Url as being a property of User so I am not sure why you are trying to initialize a new User with Url. But assuming you initialize an instance of User properly (I am referring to the line of code var user = new User { ... }; you should be able to use the .Add() method to add it to the User table via EF.

这篇关于用户注册时如何将数据保存到数据库中,即如何记住他在数据库中注册的数据?(给出错误)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
C#/.NET最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆