Entity Framework 6, невозможно добавить новую записьC#

Место общения программистов C#
Anonymous
Entity Framework 6, невозможно добавить новую запись

Сообщение Anonymous »

Я использую Entity framework 6.1.3 в приложении .Net 4.5 WCF/HTTP. У меня возникли проблемы с сохранением новых данных.
мой код выглядит следующим образом:

Код: Выделить всё

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() — это метод, преобразующий комментарий в комментарий.
При добавлении моих самых первых данных в таблицу у меня возникает исключение при вызове 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
};
}
Класс комментаторов:

Код: Выделить всё

[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; }
}
Изменить:
Запрос передан на SQL Server 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' (Type = DateTime2)
  • @2: '1786' (Type = Int32)
  • @3: 'coucou' (Type = AnsiString, Size = 300)
  • @4: '2' (Type = Int32)
Выполнено самостоятельно таким образом и работает нормально:

Код: Выделить всё

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
Все еще не понимаю

Вернуться в «C#»