在MVC3中正确使用.Net实体

时间:2011-12-16 16:28:02

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

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

我有我的UserModel:

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();
    }

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

以下是我正在处理的应用程序的一个示例,我们说它编译/运行/保存到DB

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