如何在数据库优先代码中进行更改,使其与代码优先一起工作



我在改变代码从数据库第一到代码第一的麻烦。我正在实现这个博客帖子http://techbrij.com/facebook-wall-posts-comments-knockout-aspnet-webapi。第一个问题是首先从代码生成的数据库。它正在数据库中创建两个User Profile表。First是单数形式,another是复数形式。

在注册时创建单个UserProfile表(使用Simple membership)。 我的Post类是这样的----

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

}和我的Post Comment类是这样的----

   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。如果有人能帮助我在得到这个工作与代码,那么这将是很大的帮助。还有一件事,我已经手动输入一些样本数据到数据库中,所以,登录后,它应该显示帖子和评论从数据库,但它没有显示,如果我试图发布的东西,它抛出异常System.Data.Infrastructure.DbUpdateException在这行----

   public override int SaveChanges()
    {
       return base.SaveChanges();
    }
在WallEntitiesDbContext类中

。有人看一下吗?

我认为不需要两个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; }

在本文的dbfirst方法中,您可以使用它,但在代码优先方法中,两个dbcontext将创建两个userProfile表。

相关内容

  • 没有找到相关文章

最新更新