我有两个具有多对多关系的课程。当我保存上下文时,Entity Framework不使用现有的ID,它会在我的数据库中创建新条目。
我的课程如下:Country和CountryGroup(在我的数据库EF中按预期创建CountryGroupCountries)。
public class Country : EntityBase
{
public Country()
{
CountryGroups = new List<CountryGroup>();
}
public virtual List<CountryGroup> CountryGroups { get; set; }
}
public class CountryGroup : EntityBase
{
public CountryGroup()
{
Countries = new List<Country>();
}
public virtual List<Country> Countries { get; set; }
}
public abstract class EntityBase
{
public EntityBase()
{
DateCreate = DateTime.Now;
DateUpdate = DateTime.Now;
DateDelete = DateTime.Now;
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
[Required]
public virtual String Name { get; set; }
}
我使用ASP MVC 4和Entity Framework 5.当我想保存CountryGroup时,我使用已经在我网站中的国家/地区。 Ids是正确的。
public virtual void Save(TEntity entity)
{
EntityRepository.Insert(entity);
Context.SaveChanges();
}
我只想让EF保存我的对象以及与国家的关系,但不是。我有什么解决方案?我觉得我对EF管理多对多的方式有误解。
答案 0 :(得分:0)
经过多次研究后,我相信我的问题在于模型绑定器。它必须只是创建对象而不从上下文中获取它们。我覆盖了我的保存方法,用来自上下文的新组件替换CountryGroup实体中的每个国家。这不是最优的,但我会研究模型绑定,然后我会在这些解决方案之间进行仲裁。