Я использую Entity Framework 6.0.0 в проекте, используя сначала код и API DbContext. В моем приложении есть 2 сущностей объектов, которые имеют один-ко-многим, как показано нижеСохранение одного EntityObject с Entity Framework code сначала
class RefTable {
[Key]
public int Id { get; set; }
public string RefName { get; set; }
public virtual ICollection<Data> DataDetails { get; set; }
}
public class Data
{
[Key]
public int Id { get; set; }
public string RefId { get; set; }
[ForeignKey("RefId")]
public virtual RefTable Machine { get; set; }
}
RefTable
будет заполняться при запуске приложения и будет едва претерпевают изменения. Однако Data
будет меняться время от времени.
Мои Context.cs как ниже
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=CounterDbString")
{
Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>());
}
public DbSet<RefTable> RefData { get; set; }
public DbSet<Data> Data { get; set; }
}
код, я использую для сохранения данных
public void Write(IList<RefTable> refDataList)
{
foreach (var entity in refDataList)
{
var element = myContext.RefData.Find(entity.Id);
if (element == null)
{
myContext.RefData.Add(entity);
}
}
myContext.SaveChanges();
}
public void Write(IList<Data> dataList)
{
myContext.Data.AddRange(dataList);
myContext.SaveChanges();
}
Когда я пытаюсь выполнить myContext.SaveChanges()
во второй функции, я всегда получаю ошибку обновления говоря violation of Primary Key
, поскольку он пытается вставить те же данные в RefTable
. Есть ли способ сохранить только изменения в объекте Data
?
Показать код, как вы получаете/изменение сущности перед сохранением. – 3615
Обновлен вопрос выше. – SohamC
Вам нужно показать код, который вызывает 'Write' - как вы получаете сущности, которые передаются в качестве аргументов. Оба «Пишут» не имеют ничего плохого, проблема в том, что вы называете это последним. –