我在改变代码从数据库第一到代码第一的麻烦。我正在实现这个博客帖子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表。