0
votes

EntityFramework un à de nombreuses relations Un problème d'insertion répétée

enter code here

[Table("Articles")]
public class Article : IEntity
{
    [Required, StringLength(60)]
    public string Title { get; set; }
    public int CategoryId { get; set; }
    [Required, StringLength(2500)]
    public string Text { get; set; }
    public int LinkCount { get; set; }
    public virtual User Owner { get; set; }
    public virtual Category Category { get; set; }
    public virtual Html_Content_Result HtmlPage { get; set; }
    public virtual List<Comment> Comments { get; set; }
    public virtual List<Liked> Likes { get; set; }       
}

    [Table("Users")]
public class User : IEntity
{
    [StringLength(25)]
    public string Name { get; set; }
    [StringLength(25)]
    public string Lastname { get; set; }
    [StringLength(25), Required]
    public string Username { get; set; }
    [StringLength(100), Required]
    public string Password { get; set; }
    [StringLength(70), Required]
    public string Email { get; set; }
    public bool IsActive { get; set; }
    [Required]
    public Guid ActivateGuid { get; set; }
    public virtual List<Article> Articles { get; set; }
    public virtual List<Comment> Comments { get; set; }
    public virtual List<UsersRole> UsersRoles { get; set; }
    public virtual List<Liked> Likes { get; set; }
}
enter image description hereI have two entity named User and named Article.
I created my db with entityframework codefirst.
There is  one to many relation between this two table.
Problem is when i insert operation to article table i add to the model  user entity from session and inserted repeated entery on my user table beacuse i already inserted my user before.What should i do for solution?

3 commentaires

Veuillez ajouter votre code d'insertion qui produit des duplicats.


Bien sûr, je l'ai ajouté ci-dessous.


1) S'il vous plaît ajoutez-le à la question 2) Veuillez ajouter du code qui fonctionne avec l'ensemble de l'entité


3 Réponses :


0
votes
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    [ValidateInput(false)]
    public ActionResult Index(Article model)
    {
        BusinessLayerResult<Article> res = new BusinessLayerResult<Article>();
        res.Result = model;
        if (ModelState.IsValid)
        {
            model.HtmlPage.Id = res.Result.Id;
            model.Owner = Session["user"] as User;
            _articleService.Add(res);

        }
      }

0 commentaires

0
votes
   public int Add(TEntity entity)
    {
        if (entity is IEntity)
        {
            IEntity myEntity = entity as IEntity;
            DateTime dateTime = DateTime.Now;
            myEntity.CreatedOn = dateTime;
            myEntity.ModifiedOn = dateTime;
            myEntity.ModifiedUsername = identity.Id.ToString();
        }
        using (TContext context = new TContext())
        {
            context.Configuration.LazyLoadingEnabled = false;
            var addedEntity = context.Entry(entity);
            addedEntity.State = EntityState.Added;
            return context.SaveChanges();
        }
    }

0 commentaires

0
votes

Le problème est que vous créez un nouveau contexte qui ne suive pas votre utilisateur existant ( Model.owner code>). Il semble que vous ayez mis en œuvre un référentiel générique et je ne sais pas comment gérer ce problème dans ce cas, mais vous devrez en général ajouter votre utilisateur à des entités suivies avec context.attach code> ou context.Entry code>. Vous pouvez également essayer de changer votre code dans:

    using (TContext context = new TContext())
    {
        context.Configuration.LazyLoadingEnabled = false;
        context.Attach(entity)
        return context.SaveChanges();
    }


0 commentaires