如何在Database First代码中进行更改以使其与Code First一起使用

时间:2015-09-16 05:06:02

标签: asp.net-mvc-4 entity-framework-4 code-first simplemembership ef-database-first

我在首先将代码从数据库更改为代码时遇到了问题。我正在实施此博客文章http://techbrij.com/facebook-wall-posts-comments-knockout-aspnet-webapi。 第一个问题是首先从代码生成数据库。它在数据库中创建两个用户配置文件表。首先是单数,另一个是Plurized。

在注册时创建单一(UserProfile表)(使用简单成员资格)。  我的帖子类就是这样----

   public class Post
{
    public Post()
    {
        this.PostComments = new HashSet<PostComment>();
    }
    [Key]
    public int PostId { get; set; }
    public string Message { get; set; }
    public int PostedBy { get; set; }
    public System.DateTime PostedDate { get; set; }
    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual UserProfile UserProfile { get; set; }
    public virtual ICollection<PostComment> PostComments { get; set; }

}

}  和我的帖子评论课就是这样----

   public class PostComment
{
    [Key]
    public int CommentId { get; set; }

    public int PostId { get; set; }
    public string Message { get; set; }
    public int CommentedBy { get; set; }
    public System.DateTime CommentedDate { get; set; }

    public virtual Post Post { get; set; }
    public virtual UserProfile UserProfile { get; set; }
}

,我的UserProfile类就像这样----

    public class UserProfile
{
    public UserProfile()
    {
        this.PostComments = new HashSet<PostComment>();
        this.Posts = new HashSet<Post>();
    }
    [Key]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string AvatarExt { get; set; }

    public virtual ICollection<PostComment> PostComments { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}

和我的DbContext就是这样---

    public class WallEntitiesDbContext : DbContext
{
    public WallEntitiesDbContext():base("WallEntitiesDbContext")
    {

    }
    public DbSet<PostComment> PostComments { get; set; }
    public DbSet<Post> Posts { get; set; }
    public DbSet<UserProfile> UserProfiles { get; set; }
    public override int SaveChanges()
    {
       return base.SaveChanges();
    }
}

,我的连接字符串就像这样----

    <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=DBWallPostByTechBrij;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />

我应该做出哪些更改,以便在数据库中只创建一个UserProfile表,而WallEntitiesDbContext应该能够从数据库中的该表中检索信息。 现在,如果我删除------

  DbSet<UserProfile> UserProfiles {get; set;}

然后我开始在wallpostController中收到错误。如果有人能帮助我使用代码,那么这将是很好的帮助。更多的事情,我已经手动将一些示例数据输入到数据库中,因此,登录后它应该显示来自数据库的帖子和评论,但它是#s; s没有显示,如果我试图发布一些东西,它会在此行抛出异常System.Data.Infrastructure.DbUpdateException ----

   public override int SaveChanges()
    {
       return base.SaveChanges();
    }

在WallEntitiesDbContext类中。 Plzzz任何人都看看它。我应该做些什么改变才能让它发挥作用。

1 个答案:

答案 0 :(得分:1)

我认为没有必要使用两个dbContext,因为你正在从文章中实现。

所以,只使用一个这样的dbcontext ----

     public class UsersContext : DbContext
     {
     public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfile { get; set; }
    public DbSet<Post> Posts { get; set; }
    public DbSet<PostComment> PostComments { get; set; }

在文章中的DbFisrt方法中,你可以使用它,但在代码第一种方法中,确定两个dbcontext将创建两个userProfile表。 没有什么需要改变的。