【问题标题】:Properly using .Net entities in MVC3在 MVC3 中正确使用 .Net 实体
【发布时间】:2011-12-16 16:28:02
【问题描述】:

我正在关注这篇文章: http://msdn.microsoft.com/en-us/data/gg685467

我有我的用户模型:

using System;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace Website.Models
{
    public class UserContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    }

    public class UserModel
    {
        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }

        public DateTime DateCreated { get; set; }
    }
}

但是当我跑步时:

            using (UserContext db = new UserContext())
            {
                db.Users.Add(user);
                db.SaveChanges();
            }

我收到错误实体未映射...

谁能告诉我我做错了什么?我尝试使用另一种添加实体数据模型的方法,但它不会使用我的主连接。请问我做错了什么?

编辑: 现在没有任何东西进入数据库,但我没有收到任何错误,这就是我正在做的:

    User user = new UserModel();
    user.FirstName = "Please";
    user.LastName = "Work";
    user.DateCreated = DateTime.Now;
    user.AspNetUserId = new Guid();

    using (var userContext = new UserContext())
    {
        userContext.Users.Add(user);
        userContext.SaveChanges();
    }

【问题讨论】:

    标签: asp.net asp.net-mvc-3 entities


    【解决方案1】:

    因为您的上下文中只有 User 类型 DbSet 并且您正在尝试保存 UserModel 类型对象。将 DbSet 声明更改为 DbSet&lt;UserModel&gt;

    public class UserContext : DbContext
    {
        public DbSet<UserModel> Users { get; set; }
    }
    

    【讨论】:

    • 您好,我这样做了,现在我没有收到错误,但是没有任何内容进入数据库...
    【解决方案2】:

    您需要将新对象的State 告诉您的上下文。如果我错了,请纠正我,但是执行 .Add() 时的默认状态是 EntityState.Unchanged,因此上下文不会保存任何内容,因为就它而言,没有什么可保存的。

    using (var userContext = new UserContext()) 
        { 
            userContext.Users.Add(user);
            userContext.entry(user).State = EntityState.Added; 
            userContext.SaveChanges(); 
        } 
    

    这是我正在开发的一个应用程序的示例,它编译/运行/保存到数据库

           dr405.Transmitted = true;
            dr405.ModDate = DateTime.Now;
            db.dr405s.Add(dr405);
            db.Entry(dr405).State = EntityState.Modified; 
            service.Save(db);
    

    【讨论】:

    • 你能再具体一点吗?什么没用?您是否收到运行时错误?
    • 您的模型名称将是您的表的名称,您可以确认您有一个名为 UserModel 的表吗?我没有看到 Users 类型的创建位置。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2011-10-06
    • 2011-11-19
    • 2012-10-03
    • 2012-04-09
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多