Никогда не следует использовать один и тот же объект для представления нескольких объектов в БД. Под капотом EF хранит ссылки на известные ему объекты данных, и эти ссылки имеют большое значение.
Если вы хотите добавить много похожих объектов, у вас есть несколько вариантов. Два из них:
Использование метода для инициализации новых объектов
Вы можете инициализировать несколько экземпляров ваших объектов с помощью общего метода и добавлять только значения свойств, которые отличаются (ваш метод также может быть локальной функцией, если вы используете C # 7):
MyClass CreateInstance() {
return new MyClass {
Name = "theName";
Color = "Red";
}
}
public ActionResult Test(MyClass obj, int Counter){
for(int i = 0; i < Counter; i++){
MyClass newObject = CreateInstance();
newObject.Name = newObject.Name + " " + i.ToString();
Db.MyClass.Add(newObject);
Db.SaveChanges();
}
}
Сделать объект клонируемым
Вы можете сделать объект клонируемым (вы можете реализовать интерфейс ICloneable
, но здесь это не требуется, и его метод Clone
возвращает object
):
class MyClass{
public int Id { set; get; }
public string Name { set; get; }
public string Color { set; get; }
public MyClass Clone() {
MyClass clone = (MyClass)MemberwiseClone();
clone.Id = 0;
return clone;
}
}
public ActionResult Test(MyClass obj, int Counter){
for(int i = 0; i < Counter; i++){
MyClass newObject = obj.Clone();
newObject.Name = obj.Name + " " + i.ToString();
Db.MyClass.Add(newObject);
Db.SaveChanges();
}
}
Какой вариант вы должны использовать, полностью зависит от вашего конкретного варианта использования.