Я использую инфраструктуру Entity 6.1.3 в приложении .NET .NET WCF/HTTP. У меня проблемы с сохранением новых данных.Entity Framework 6, не может добавить новую запись
мой код выглядит следующим образом:
using (AgpModel model = new AgpModel())
{
Entite.db.commentaire comment = commentaire.toDB();
model.commentaires.Add(comment);
model.SaveChanges();
commentaire.Id = comment.id;
}
AgpModel
мой контекст, commentaire
мой передний модель которым можно сериализовать через WCF, и comment
является объектом я пытаюсь спасти.
toDB()
является метод преобразования commentaire
в comment
.
При добавлении моих самого первых данных в таблицу, у меня исключение на вызове SaveChanges()
, который говорит: обновление
магазина, вставить или удалить заявление повлияло неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены. См. http://go.microsoft.com/fwlink/?LinkId=472540 для получения информации о понимании и обработке оптимистичных исключений параллелизма.
Я попробовал доступный метод по ссылке ниже только, чтобы это исключение:
OriginalValues не может быть использована для лиц в состоянии Добавлено.
Чтение на столе отлично работает.
Вот некоторые дополнительные код, который может помочь вам понять:
Метод toDB:
public db.commentaire toDB()
{
return new db.commentaire() {
id = this.Id,
stagiaire = this.IdStagiaire,
utilisateur = this.IdUtilisateur,
niveau = (int)this.Niveau,
contenu = this.Contenu,
date = this.Date
};
}
Commentaire класс:
[Table("agp.commentaires")]
public partial class commentaire
{
[Key]
[Column("commentaire", Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int utilisateur { get; set; }
[Key]
[Column("date", Order = 2, TypeName = "smalldatetime")]
public DateTime date { get; set; }
[Key]
[Column(Order = 3)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int stagiaire { get; set; }
[Key]
[Column(Order = 4)]
[StringLength(300)]
public string contenu { get; set; }
[Key]
[Column(Order = 5)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int niveau { get; set; }
public virtual utilisateur utilisateur1 { get; set; }
public virtual Stagiaire Stagiaire1 { get; set; }
}
Edit:
запрос передан на сервер sql 2008:
INSERT [agp].[commentaires]([utilisateur], [date], [stagiaire], [contenu], [niveau]) VALUES (@0, @1, @2, @3, @4)
SELECT [commentaire] FROM [agp].[commentaires] WHERE @@ROWCOUNT > 0 AND [commentaire] = scope_identity() AND [utilisateur] = @0 AND [date] = @1 AND [stagiaire] = @2 AND [contenu] = @3 AND [niveau] = @4
с этими параметрами:
- @ 0: '1' (Type = Int32)
- @ 1: '30/07/2015 18:50:02' (тип = datetime2)
- @ 2: '1786' (тип = Int32)
- @ 3: 'Coucou' (тип = AnsiString, размер = 300)
- @ 4: '2' (тип = Int32)
Выполненный по себе этот путь и waorks нормально:
DECLARE @0 as INT = 1;
DECLARE @1 AS DateTime2 = '30/07/2015 18:50:02';
DECLARE @2 AS int = 1786;
DECLARE @3 AS nvarchar(300) = 'coucou';
DECLARE @4 AS int = 2;
INSERT [agp].[commentaires]([utilisateur], [date], [stagiaire], [contenu], [niveau])
VALUES (@0, @1, @2, @3, @4)
SELECT [commentaire]
FROM [agp].[commentaires]
WHERE @@ROWCOUNT > 0 AND [commentaire] = scope_identity() AND [utilisateur] = @0 AND [date] = @1 AND [stagiaire] = @2 AND [contenu] = @3 AND [niveau] = @4
До сих пор не понимаю,