Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Todo esta en la carpeta Models dentro de mi programa.
- //identitymodels.cs
- public class ApplicationUser : IdentityUser
- {
- //propiedades que añadire a la tabla Users de Identity
- public string user_url { get; set; }
- //este campo hay que manejarlo a la hora de registrar los usuarios que almacene en que fecha y hora se registraron los usuarios
- public DateTime user_registered { get; set; }
- public virtual ICollection<Post> Post { get; set; }
- public virtual ICollection<Comment> Comment { get; set; }
- public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
- {
- // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
- var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
- // Add custom user claims here
- return userIdentity;
- }
- }
- public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
- {
- public ApplicationDbContext()
- : base("DefaultConnection")//, throwIfV1Schema: false)
- {
- }
- private string[] databases = { "SQLServer", "PostgreSQL", "MySQL" };
- public string DatabaseCheck { get; set; }
- public DbSet<Post> Post { get; set; }
- public DbSet<Comment> Comment { get; set; }
- public DbSet<Option> Option { get; set; }
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- base.OnModelCreating(modelBuilder);
- modelBuilder.Entity<IdentityUser>().ToTable("Users");
- modelBuilder.Entity<ApplicationUser>().ToTable("Users");
- }
- public static ApplicationDbContext Create()
- {
- return new ApplicationDbContext();
- }
- public string CheckDb()
- {
- DatabaseCheck = databases[0];
- return DatabaseCheck;
- }
- }
- //dentro del fichero comment.cs
- namespace blogmvc.Models
- {
- public class Comment
- {
- public Comment()
- {
- //aqui pienso hacer la discriminacion si usamos SQL Server, MySQL o PostgreSQL o SQLite que sirve para apps pequeñas
- CheckDB();
- }
- [Key]
- [Column("comment_id")]
- public Int64 CommentID { get; set; }
- [Column("comment_author_email")]
- public string CommentAuthorEmail { get; set; }
- [Column("comment_date")]
- public DateTime CommentDate { get; set; }
- [Column("comment_date_gmt")]
- public DateTime CommentDateGmt { get; set; }
- [Column("comment_author_ip")]
- public string CommentAuthorIP { get; set; }
- //campo longtext en MySQL
- [Column("comment_content")]
- public string CommentContent { get; set; }
- [Column("comment_aproved")]
- public string CommentAproved { get; set; }
- /*
- * Yo creo que asi deberia salir la clave externa con el nombre que yo necesito que es comment_post_id clave id de post
- *
- *
- */
- //claves foraneas
- [Column("comment_post_id")]
- public Int64 CommentPostID { get; set; }
- [ForeignKey("comment_post_id")]
- public virtual Post Post { get; set; }
- //clave externa de la tabla Users a la tabla Comment
- //public virtual IdentityUser IdentityUser { get; set; }
- //campo CommentAuthor sera el id del usuario en cuestion asociado a un mail
- //[Column("comment_author")]
- //public int CommentAuthor { get; set; }
- #region methods
- // este metodo es practicamente igual en Post tengo que ver la forma de usar la OOP para cambiarlo
- protected void CheckDB()
- {
- //aqui voy a preguntar por la DB y voy a cambiar segun me haga falta
- ApplicationDbContext applicationDbContext = new ApplicationDbContext();
- string StringDB = applicationDbContext.DatabaseCheck;
- if (StringDB == "SQLServer")
- {
- ColumnAttribute colum = new ColumnAttribute(CommentContent);
- colum.TypeName = "nvarchar";
- }
- if (StringDB == "PostgreSQL")
- {
- ColumnAttribute colum = new ColumnAttribute(CommentContent);
- colum.TypeName = "text";
- }
- if (StringDB == "MySQL")
- {
- ColumnAttribute colum = new ColumnAttribute(CommentContent);
- colum.TypeName = "LongText";
- }
- }
- }
- #endregion
- }
- //fichero Post.cs
- namespace blogmvc.Models
- {
- public class Post
- {
- //por defecto pondremos el campo de PostgreSQL y asi no hay que hacer nada si el usuario usa PostgreSQL
- //en el constructor definire el tipo de campo segun en la DB que conectemos
- public Post()
- {
- /*veremos en que DB estamos conectados y dependiendo de eso crearemos el campo
- * LongText = 4 GB MySQL
- * Text campo ilimitado en PostgreSQL
- * nvarchar en SQL Server
- */
- //saber que DB es la que estamos manejando
- CheckDB();
- }
- [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- [Key]
- [Column("post_id")]
- public Int64 PostId { get; set; }
- [Column("post_date")]
- public DateTime Post_date { get; set; }
- //Column System.ComponentModel.DataAnnotations.Schema.ColumnAttribute ponerlo en Typename = "text"
- // Esta columna sera definida en el metodo CheckDB
- [Column("post_content")]
- public string Post_Content { get; set; }
- [Column("post_title")]
- public string Post_title { get; set; }
- [Column("post_modified")]
- public DateTime PostModified { get; set; }
- [Column("post_status")]
- public string PostStatus { get; set; }
- [Column("post_name")]
- public string PostName { get; set; }
- [Column("post_type")]
- public string PostType { get; set; }
- [Column("post_Parent")]
- public Int64 PostParent { get; set; }
- //claves foraneas
- //campo que vendra de la tabla aspnetusers es la relacion con la tabla aspnetusers que tengo que crearla
- //[Column("email_author")]
- //[ForeignKey("email_author")]
- public virtual ApplicationUser User_ID { get; set; }
- //propiedad de navegacion que hace de 1 a muchos Post de 1 y Comment de muchos
- public ICollection<Comment> Comment { get; set; }
- #region methods
- // este metodo es practicamente igual en Comment tengo que ver la forma de usar la OOP para cambiarlo
- protected void CheckDB()
- {
- //aqui voy a preguntar por la DB y voy a cambiar segun me haga falta
- ApplicationDbContext applicationDbContext = new ApplicationDbContext();
- string StringDB = applicationDbContext.DatabaseCheck;
- if (StringDB == "SQLServer")
- {
- ColumnAttribute colum = new ColumnAttribute(Post_Content);
- colum.TypeName = "nvarchar";
- }
- if (StringDB == "PostgreSQL")
- {
- ColumnAttribute colum = new ColumnAttribute(Post_Content);
- colum.TypeName = "text";
- }
- if (StringDB == "MySQL")
- {
- ColumnAttribute colum = new ColumnAttribute(Post_Content);
- colum.TypeName = "LongText";
- }
- }
- #endregion
- }
- }
- //eso son las clases que me estan dando por saco concretamente la de comment
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement