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 Réponses :
[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); } }
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(); } }
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();
}
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é