Como projetar banco de dados com conteúdo editável/versão do usuário usando o código primeiro?
-
28-09-2019 - |
Pergunta
Eu desenvolvendo uma página em que os usuários poderão adicionar e modificar o conteúdo existente, não é um wiki por Sé, mas meio que, como as habilidades de edição.
Estou trabalhando com o EF4 e a nova abordagem do Código no CTP mais recente, então qual seria o melhor design de classe para isso?
Meu palpite atual é algo assim:
public class VersionableText
{
public int Id { get; set; }
public DateTime Date{ get; set; }
public String Text{ get; set; }
public virtual User User{ get; set; }
}
e então use -o em minhas outras entidades, em um contexto, pode ser algo assim
public class Question
{
public int Id {get; set;}
public virtual VersionableText Title {get; set;}
public virtual VersionableText Content{get; set;}
...
}
Mas não estou realmente convencido por isso ... já que também vou ter tags, capacidade de excluir/não formar postagens, reversão, etc. Você sabe como projetar corretamente as aulas que me ajudam a versão corretamente?
Solução
Objetivo para a simplicidade
A principal pergunta que você precisa fazer é Você vai mostrar todas as versões o tempo todo ou a versão mais recente na maioria das vezes e todas elas mediante solicitação? Semelhante a aqui. Na maioria das vezes, você vê apenas a versão mais recente.
Se isso for o mesmo com o nosso caso, eu não me importaria tanto com essas versões. Mas quando você deseja mostrar todos eles em uma classe de uma página, o design de mais ou menos depende da maneira como você gostaria de mostrá -lo. Isso vai mostrar mudanças e coisas assim.
Prefiro ter uma aula como:
public class Question
{
public int Id { get; set; }
public QuestionStatus Status { get; set; }
}
public class QuestionHistory
{
public Question Question { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public User Author { get; set; }
public DateTime Created { get; set; }
public IList<Tag> Tags { get; set; }
}
E quando eu exibia todos eles, eu apenas devolveria uma lista desses pedidos por LastChange
. Adicionei a lista de tags, mas não adicionei nenhuma das outras propriedades relacionadas ao processo relacionadas ao estado de perguntas. Depende enormemente da sequência do processo.