none
Como que ficaria um relacionamento de um para muitos Code First Mvc

    Question

  • Bom dia estou montando um gerênciador de conteúdo simple ontem tem um Um post   uma categoria  esta dando um erro de relacionamento  na hora de editar  queria saber se este tipo de relacionamento ta certo de fazer   

    essa e a classe de post

     public class Post : Entity
        {
            /// <summary>
            /// Titulo do post 
            /// </summary>
            public string Titulo { get; set; }
    
            /// <summary>
            /// Breve descrição do post
            /// </summary>
            public string Descricao { get; set; }
    
            /// <summary>
            /// Texto do Post
            /// </summary>
            public string PostTexto { get; set; }
    
            public virtual CategoriaPost CategoriaPost { get; set; }
        }

    essa e a classe de Categoria Post

    public class CategoriaPost : Entity
       {
          /// <summary>
          /// Nome da Categoria do Post
          /// </summary>
          public string Nome { get; set; }
    
          public virtual IList<Post> Posts { get; set; }
    
       }


    Fábio de Oliveira

    Wednesday, February 06, 2013 12:23 PM

Answers

  • Vc quer criar uma chave de relacionamento, certo?

    Então vc precisa ter um ID

    ForeignKey("CategoriaPostID")]
        public integer CategoriaPostID { get; set; }
        public virtual CategoriaPost CategoriaPost { get; set;}


    Paulo Marcelo Dalbosco


    Wednesday, February 06, 2013 1:10 PM

All replies

  • Qual erro?

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    Wednesday, February 06, 2013 12:47 PM
  • este erro

    The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.


    Fábio de Oliveira

    Wednesday, February 06, 2013 12:49 PM
  • Como esta sua classe contexto?


    Paulo Marcelo Dalbosco

    Wednesday, February 06, 2013 12:54 PM
  • public class Contexto : DbContext { public DbSet<Usuario> Usuario { get; set; } public DbSet<CategoriaPost> CategoriaPost { get; set; } public DbSet<Post> Post { get; set; } public DbSet<Galeria> Galeria { get; set; } public DbSet<Imagem> Imagem { get; set; } /// <summary> /// Desabilita a pluralização do nome das tabelas /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //Mapeamento many-to-many de Galeria <-> Imagem modelBuilder.Entity<Galeria>() .HasMany(x => x.Imagens) .WithMany() .Map(a => { a.MapLeftKey("Galeria_Id"); a.MapRightKey("Imagens_Id"); a.ToTable("GaleriaImagens"); }); } public new void SaveChanges() { base.SaveChanges(); }

    essa e a minha classe de contexto

    Fábio de Oliveira

    Wednesday, February 06, 2013 1:02 PM
  • Vc quer criar uma chave de relacionamento, certo?

    Então vc precisa ter um ID

    ForeignKey("CategoriaPostID")]
        public integer CategoriaPostID { get; set; }
        public virtual CategoriaPost CategoriaPost { get; set;}


    Paulo Marcelo Dalbosco


    Wednesday, February 06, 2013 1:10 PM
  • alem de criar essa chave teria que configurar no Contexto também esse relacionamento ?

    Fábio de Oliveira

    Wednesday, February 06, 2013 1:11 PM
  • Você está criando 2 dbContext no seu método?

    Você não pode anexar o mesmo objeto em dois contextos.

    Como está fazendo esse update?


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    Wednesday, February 06, 2013 1:12 PM
  • Como vc quer que seja a relação ?

    1 Post pode ter varias CategoryPost?

    Wednesday, February 06, 2013 1:13 PM
  • Não, no seu contexto ele soh precisa ter um nome do contexto.

    public DbSet<CategoriaPost> CategoriaPosts { get; set; }
    Eu costumo dar nome do contexto sempre no Plural para depois não me confundir.


    Paulo Marcelo Dalbosco


    Wednesday, February 06, 2013 1:15 PM
  • Na verdade seria o contrario .. a categoria  ter vários post

    Fábio de Oliveira

    Wednesday, February 06, 2013 1:24 PM
  • Este eo  action do Controller 

     [HttpPost]
            public ActionResult Editar(long id, EditarViewModel editarViewModel)
            {
                if (ModelState.IsValid)
                {
                  
                    var  post = new Post();
                    post = Mapper.Map(editarViewModel, _postServico.ObterPorIdServico(id));
    
                    post.CategoriaPost = _categoriaPostServico.ObterPorIdServico(editarViewModel.CategoriaPost_id);
    
                    _postServico.EditarServico(post);
    
                    return RedirectToAction("Index", "Post");
    
                }
                editarViewModel.CategoriaPostDropDown = _categoriaPostServico.CategoriaPostDropDown;
                return View(editarViewModel);
    
            }

    esse  e as propiedade e o construtor 

      #region Propiedade
            private readonly ModelStateDictionary _modelState;
            private readonly IPostRepositorio _postRepositorio;
            private readonly ICategoriaPostRepositorio _categoriaPostRepositorio;
            private readonly Contexto _contexto;
            private int TotalRegistro { get; set; }
    
            #endregion
    
            #region Construtor
            public PostServico(ModelStateDictionary modelState)
            {
                _contexto = new Contexto();
                TotalRegistro = 0;
                _modelState = modelState;
                _postRepositorio = new PostRepositorio(_contexto);
                _categoriaPostRepositorio = new CategoriaPostRepositorio(_contexto);
    
    
            }
            #endregion

    este eo Servico  

     #region Editar
            /// <summary>
            /// Serviço pada salvar alteraçao de um registro selecionado pelo Id  no repositorio
            /// 
            /// </summary>
            /// <param name="id">Id Do Usuario</param>
            /// <param name="post"></param>
            public void EditarServico(Post post)
            {
               _postRepositorio.Editar(post);
                
                _contexto.SaveChanges();
    
            }
            #endregion



    Fábio de Oliveira

    Wednesday, February 06, 2013 1:27 PM
  • public class Post : Entity {

    /// <summary> /// Titulo do post /// </summary> public string Titulo { get; set; } /// <summary> /// Breve descrição do post /// </summary> public string Descricao { get; set; } /// <summary> /// Texto do Post /// </summary> public string PostTexto { get; set; } public int IDCategoriaPost {get;set;} public virtual CategoriaPost CategoriaPost { get; set; } }

    public class CategoriaPost : Entity
       {
          /// <summary>
          /// Nome da Categoria do Post
          /// </summary>
          public string Nome { get; set; }
    
          public virtual IList<Post> IPosts { get; set; }
    
       }


    Wednesday, February 06, 2013 1:29 PM