C# 如何将ASP Net成员资格提供程序用户ID保存到另一个sql表中?
我想获取ASP NET MVC成员资格提供程序UserProfile表UserId字段并将其保存到单独的表中 这是我的模型C# 如何将ASP Net成员资格提供程序用户ID保存到另一个sql表中?,c#,mysql,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Mysql,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我想获取ASP NET MVC成员资格提供程序UserProfile表UserId字段并将其保存到单独的表中 这是我的模型 public class Product { public int ProductId { get; set; } public int UserId { get; set; } public string ProductName { get; set; } } 我不想再将UserId字段添加到我的模型中。 这是我的控制器: private Us
public class Product
{
public int ProductId { get; set; }
public int UserId { get; set; }
public string ProductName { get; set; }
}
我不想再将UserId字段添加到我的模型中。
这是我的控制器:
private UsersContext db = new UsersContext();
// GET: /ProCont/
int UserID = (int)Membership.GetUser().ProviderUserKey;
public ActionResult Index()
{
return View(db.Products.Where(p => p.UserId == UserID).ToList());
}
怎么办
问候
Dostdar真的不清楚你在问什么?但您的意思是想将
UserID
存储到数据库中的Products
表中。然后您可以指定您的模型类,如下所示
[System.ComponentModel.DataAnotations.Table("Products")]
public class Product
{
public int ProductId { get; set; }
public int UserId { get; set; }
public string ProductName { get; set; }
}
您可以手动创建表Products
,也可以使用EF code first Migrations
创建快照并更新数据库以添加新创建的表
然后您可以向表中添加数据,如
Product p1 = new Product
{
UserID = (int)Membership.GetUser().ProviderUserKey,
ProductName = "XXX";
};
db.Products.Add(p1);
db.SaveChanges();
根据您的评论:
您目前拥有的是正确的方法,否则无法将产品与特定用户联系起来。这就是所谓的
引用完整性约束
。这里,模型类中的UserID
充当外键。您无法自动执行此操作。免责声明:在已存在的答案中作为编辑太长,因此会在单独的答案中发布
要回答您关于如何在模型对象中添加UserID
字段的问题,下面是代码段的详细说明
考虑到您已经使用ADO.NET实体数据模型添加了产品
实体
。使用您喜欢的任何名称将单独的类文件添加到您的Models
文件夹中,并具有以下代码。下面的代码段装饰您的模型对象
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
namespace MvcApplication1.Models
{
[MetadataType(typeof(productMetadata))]
public partial class Product
{
}
public class productMetadata
{
[HiddenInput(DisplayValue = false)]
public int ProductId { get; set; }
// to make the field hidden and will not display in browser
[HiddenInput(DisplayValue = false)]
//directing that don't scaffold this column since it will be added manually
[ScaffoldColumn(false)]
public int UserId { get; set; }
}
}
您可以直接修改EF中自动生成的产品
类,但如果重新生成EF模型,则更改将消失。所以,上面显示的方法最好使用MetadataType
属性
控制器动作方法:
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create([Bind(Include = "ProductName, ProductId")]Product product)
{
SampleContext db = new SampleContext();
if (ModelState.IsValid)
{
product.UserId = (int)Membership.GetUser().ProviderUserKey;
db.Products.Add(product);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(product);
}
public ActionResult List()
{
SampleContext db = new SampleContext();
IEnumerable<Product> products = db.Products.ToList();
return View(products);
}
}
}
namespace mvcapapplication1.Controllers
{
公共类HomeController:控制器
{
//
//回家/
公共行动结果索引()
{
返回视图();
}
公共操作结果创建()
{
返回视图();
}
[HttpPost]
公共操作结果创建([Bind(Include=“ProductName,ProductId”)]Product)
{
SampleContext db=新的SampleContext();
if(ModelState.IsValid)
{
product.UserId=(int)Membership.GetUser().ProviderUserKey;
db.Products.Add(产品);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(产品);
}
公共行动结果列表()
{
SampleContext db=新的SampleContext();
IEnumerable products=db.products.ToList();
返回视图(产品);
}
}
}
视图(特别是创建视图):
@model MvcApplication1.Models.Product
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ProductName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ProductName)
@Html.ValidationMessageFor(model => model.ProductName)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@model mvcapapplication1.Models.Product
@{
ViewBag.Title=“创建”;
}
创造
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
产品
@Html.LabelFor(model=>model.ProductName)
@Html.EditorFor(model=>model.ProductName)
@Html.ValidationMessageFor(model=>model.ProductName)
}
@ActionLink(“返回列表”、“索引”)
请注意,该视图只有
productname
的可编辑控件作为输入字段,因为ProductID
是一个标识列,UserID
从代码中获取值,而不是从用户获取值。@Rahul,我有一个产品表,用户可以在其中输入他们的产品。我面临的问题是,当用户登录时,他/她可以看到所有用户的产品。我想阻止这种情况,然后在模型类中添加一个UserId,然后在控制器类中使用where类来阻止其他用户查看其他用户产品。现在,当我创建一个产品时,我必须为每个产品条目输入用户ID,这是一个令人头痛的问题。我不希望这样,相反,我希望在用户登录并希望创建产品时自动执行此操作,用户id应自动获取并保存到数据库。您当前拥有的是正确的方法,否则无法将产品与特定用户关联。这就是所谓的参照完整性。这里,模型类中的userid
充当外键。你就是不能自动完成它。@rahul怎么做?告诉我更多关于我是MVC新手的信息?这不是关于MVC,而是关于DB的概念。最后,这些模型将表示DB实体,所以,如果产品表中没有userid,那么尝试将产品与用户关联,看看是否可以这样做。这会让你明白我在说什么。好吧@Rahul我会让这个用户ID出现在我的模型类中,但我不清楚的是,当用户想要创建产品时,如何自动保存这个用户ID?我无法获取您的代码?我正在使用EF迁移,我如何才能将该用户ID添加到我的表中?我无法捕获此@Rahulthere无需感谢!这是一个多么简单的问题啊。非常感谢你的努力!请你也解决这个问题好吗?