具有多对多关系和额外列的 table 的代码迁移
Code migration for table with many to many relation and extra columns
我将创建一个 table,在 ApplicationUser
和自己创建的 class 之间建立多对多关系,名为 Topic
。 table 我将用于保存用户对某个主题的赞成票和反对票,这样用户就不能对一个主题进行多次投票。所以我的想法是使用如下所示的 table(⚿ 是 table 的主键):
╔══════════════════════╦════════════════════╦═════════╦════════════════════════╗
║ UserId ⚿ ║ TopicId ⚿ ║ Vote ║ Time ║
╠══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ x ║ 1 ║ up ║ 2016/02/02 15:00:00 ║
║ y ║ 2 ║ up ║ 2016/02/01 15:00:00 ║
║ y ║ 1 ║ down ║ 2016/01/01 14:00:00 ║
╚══════════════════════╩════════════════════╩═════════╩════════════════════════╝
↓ ↓ ↓ ↓
Must reference to Must reference to Other information about the vote
the table where the the table where my
users are stored topic are stored
如何将此结构迁移到具有身份框架的数据库?我也使用代码优先的工作方式。
您可以在下面找到我的 Topic
class 和扩展到那个 class 的其他 classes。 class ApplictionUser
中的代码不变。
public class Topic
{
public int TopicId { get; set; }
public bool Deleted { get; set; }
public string UserId { get; set; }
public ApplicationUser User{ get; set; }
public string Text { get; set; }
public DateTime Creation { get; set; }
public List<Vlag> Flags { get; set; }
public int? BlogId { get; set; }
public Blog Blog { get; set; }
public int? ReactionId { get; set; }
public Reaction Reaction { get; set; }
}
public class Blog: Topic, IVote
{
public int Id { get; set; }
public int CategorieId { get; set; }
public Categorie Categorie { get; set; }
public string Name { get; set; }
public int Down { get; set; }
public int Up { get; set; }
public int CalculateTotal()
{
return Up - Down;
}
}
public class Reactie : Topic, IVote
{
public int Id { get; set; }
public int Down { get; set; }
public int Up{ get; set; }
public Blog OwnerBlog { get; set; }
public int OwnerBlogId { get; set; }
public int CalculateTotal()
{
return Up - Down;
}
}
public interface IVote // used for holding the number of up and down votes for a blog
// or reaction.
{
int Up { get; set; }
int Down { get; set; }
int CalculateTotal();
}
我找到了一种方法:
Table name: Votes
╔═════════════════╦══════════════════════╦════════════════════╦═════════╦════════════════════════╗
║ VoteId ⚿ ║ UserId ↗ ║ TopicId ↗ ║ Vote ║ Time ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 1 ║ x ║ 1 ║ up ║ 2016/02/02 15:00:00 ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 2 ║ y ║ 2 ║ up ║ 2016/02/01 15:00:00 ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 3 ║ y ║ 1 ║ down ║ 2016/01/01 14:00:00 ║
╚═════════════════╩══════════════════════╩════════════════════╩═════════╩════════════════════════╝
↓ ↓ ↓ ↓ ↓
New primary key References to References to Other information about the vote
of the table the table where the the table where my
users are stored topic are stored
图例:
- ⚿ 是主键
- ↗ 是放弃键
我将创建一个 table,在 ApplicationUser
和自己创建的 class 之间建立多对多关系,名为 Topic
。 table 我将用于保存用户对某个主题的赞成票和反对票,这样用户就不能对一个主题进行多次投票。所以我的想法是使用如下所示的 table(⚿ 是 table 的主键):
╔══════════════════════╦════════════════════╦═════════╦════════════════════════╗
║ UserId ⚿ ║ TopicId ⚿ ║ Vote ║ Time ║
╠══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ x ║ 1 ║ up ║ 2016/02/02 15:00:00 ║
║ y ║ 2 ║ up ║ 2016/02/01 15:00:00 ║
║ y ║ 1 ║ down ║ 2016/01/01 14:00:00 ║
╚══════════════════════╩════════════════════╩═════════╩════════════════════════╝
↓ ↓ ↓ ↓
Must reference to Must reference to Other information about the vote
the table where the the table where my
users are stored topic are stored
如何将此结构迁移到具有身份框架的数据库?我也使用代码优先的工作方式。
您可以在下面找到我的 Topic
class 和扩展到那个 class 的其他 classes。 class ApplictionUser
中的代码不变。
public class Topic
{
public int TopicId { get; set; }
public bool Deleted { get; set; }
public string UserId { get; set; }
public ApplicationUser User{ get; set; }
public string Text { get; set; }
public DateTime Creation { get; set; }
public List<Vlag> Flags { get; set; }
public int? BlogId { get; set; }
public Blog Blog { get; set; }
public int? ReactionId { get; set; }
public Reaction Reaction { get; set; }
}
public class Blog: Topic, IVote
{
public int Id { get; set; }
public int CategorieId { get; set; }
public Categorie Categorie { get; set; }
public string Name { get; set; }
public int Down { get; set; }
public int Up { get; set; }
public int CalculateTotal()
{
return Up - Down;
}
}
public class Reactie : Topic, IVote
{
public int Id { get; set; }
public int Down { get; set; }
public int Up{ get; set; }
public Blog OwnerBlog { get; set; }
public int OwnerBlogId { get; set; }
public int CalculateTotal()
{
return Up - Down;
}
}
public interface IVote // used for holding the number of up and down votes for a blog
// or reaction.
{
int Up { get; set; }
int Down { get; set; }
int CalculateTotal();
}
我找到了一种方法:
Table name: Votes
╔═════════════════╦══════════════════════╦════════════════════╦═════════╦════════════════════════╗
║ VoteId ⚿ ║ UserId ↗ ║ TopicId ↗ ║ Vote ║ Time ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 1 ║ x ║ 1 ║ up ║ 2016/02/02 15:00:00 ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 2 ║ y ║ 2 ║ up ║ 2016/02/01 15:00:00 ║
╠═════════════════╬══════════════════════╬════════════════════╬═════════╬════════════════════════╣
║ 3 ║ y ║ 1 ║ down ║ 2016/01/01 14:00:00 ║
╚═════════════════╩══════════════════════╩════════════════════╩═════════╩════════════════════════╝
↓ ↓ ↓ ↓ ↓
New primary key References to References to Other information about the vote
of the table the table where the the table where my
users are stored topic are stored
图例:
- ⚿ 是主键
- ↗ 是放弃键