у меня проблема с вставкой нескольких данных в две таблицы. Вот мой код
Класс контекста
var userId = Convert.ToUInt32(user.Single(logon => logon.Type == CustomClaimTypes.UserId).Value);
/*Create access table for insert*/
var modules = p.Select(collection => new Accountcollection
{
AccountId = userId,
Amount = collection.Amount,
CashSource = collection.CashSource,
CollectionDate = collection.CollectionDate,
CreatedDatetime = DateTime.Now,
UpdatedDatetime = DateTime.Now,
}).ToList();
_context.Accountcollection.AddRange(modules);
var calendar_event = p.Select(collection => new Accountcalendarevents
{
AccountId = userId,
Subject = collection.CashSource,
Description = collection.CashSource,
Start = collection.CollectionDate,
End = collection.CollectionDate,
ThemeColor = "blue",
Isfullday = true,
Status = "1",
CreatedBy = userId,
CreatedDatetime = DateTime.Now,
UpdatedBy = userId,
UpdatedDatetime = DateTime.Now
}).ToList();
_context.Accountcalendarevents.AddRange(calendar_event);
_context.SaveChanges();
}
Это моя коллекционная модель
public partial class Accountcollection
{
[Key]
public long Id { get; set; }
public long AccountId { get; set; }
public double? Amount { get; set; }
public string CashSource { get; set; }
public DateTime CollectionDate { get; set; }
public DateTime? CreatedDatetime { get; set; }
public DateTime? UpdatedDatetime { get; set; }
//public Accountcalendarevents Accountcalendarevents { get; set; }
public virtual Accountmaster Account { get; set; }
}
А это моя модель событий Caldendar Manager.
public class Accountcalendarevents
{
[Key]
public long Id { get; set; }
public long AccountId { get; set; }
public string Subject { get; set; }
public string Description { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public string ThemeColor { get; set; }
public bool Isfullday { get; set; }
public string Status { get; set; }
public long CreatedBy { get; set; }
public DateTime CreatedDatetime { get; set; }
public long UpdatedBy { get; set; }
public DateTime UpdatedDatetime { get; set; }
}
Проблема в том, что когда я вставляю только 1 данные, все работает нормально, но если я пытаюсь вставить 2 или более, я получаю такое исключение Исключение я получил
Но, когда я прокомментировал
var calendar_event = p.Select(collection => new Accountcalendarevents
{
//AccountId = userId, <-- when I comment this line
Subject = collection.CashSource,
Description = collection.CashSource,
Start = collection.CollectionDate,
End = collection.CollectionDate,
ThemeColor = "blue",
Isfullday = true,
Status = "1",
CreatedBy = userId,
CreatedDatetime = DateTime.Now,
UpdatedBy = userId,
UpdatedDatetime = DateTime.Now
}).ToList();
он работает правильно при множественной вставке данных.
Надеюсь, вы помогли мне с этим. Спасибо!
Я пробовал это раньше, но там написано, что IEnumerable<CollectionViewModel> does not contain a definition for AsNoTracking @TetsuyaYamamoto
@PaulVincentDoroyan Что такое p в p.Select(..?
Оба p на нем @TanvirArjel
@PaulVincentDoroyan Это странно! AccountId не является первичным ключом, но все еще жалуется!
Да :( Я пытаюсь исправить это уже почти неделю. @TanvirArjel
Повторяющееся сообщение: stackoverflow.com/questions/55236492/…
Возможный дубликат Получение исключения «Экземпляр объекта типа «X»»





Попробуйте добавить
AsNoTracking()послеp:p.AsNoTracking().Select(...). Похоже, проблема возникла из-за механизма отслеживания сущностей EF.