1

У нас есть приложение MVC, которое создает модели сущностей и хранит их в сеансе. Позже мы хотим зафиксировать их в базе данных. Просто пытаюсь сделатьSimple Entity Framework 4 добавочный объект

db.Attendees.AddObject(attendee); 

бросает ошибку

The EntityKey property can only be set when the current value of the property is null. 

Ключевой объект является только простой тип долго и является столбцом идентификаторов в базе данных. Что нам не хватает? Кажется, это такая простая вещь? Чтобы заставить работу работать, нам пришлось создать копию объекта, а затем сохранить копию. Можете ли вы не помещать сущностные модели моделей в сеанс, вернуть их обратно и затем сохранить их?

Вот описание Слушатель в модели Entity Framework ... это ударять SQL Server 2008 DB

[EdmEntityTypeAttribute(NamespaceName="Model", Name="Attendee")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class Attendee : EntityObject 
{ 
    #region Factory Method 

    /// <summary> 
    /// Create a new Attendee object. 
    /// </summary> 
    /// <param name="attendeeID">Initial value of the AttendeeID property.</param> 
    /// <param name="firstName">Initial value of the FirstName property.</param> 
    /// <param name="lastName">Initial value of the LastName property.</param> 
    /// <param name="email">Initial value of the Email property.</param> 
    /// <param name="createdBy">Initial value of the CreatedBy property.</param> 
    /// <param name="createdOn">Initial value of the CreatedOn property.</param> 
    /// <param name="modifiedBy">Initial value of the ModifiedBy property.</param> 
    /// <param name="modifiedOn">Initial value of the ModifiedOn property.</param> 
    public static Attendee CreateAttendee(global::System.Int64 attendeeID, global::System.String firstName, global::System.String lastName, global::System.String email, global::System.String createdBy, global::System.DateTime createdOn, global::System.String modifiedBy, global::System.DateTime modifiedOn) 
    { 
     Attendee attendee = new Attendee(); 
     attendee.AttendeeID = attendeeID; 
     attendee.FirstName = firstName; 
     attendee.LastName = lastName; 
     attendee.Email = email; 
     attendee.CreatedBy = createdBy; 
     attendee.CreatedOn = createdOn; 
     attendee.ModifiedBy = modifiedBy; 
     attendee.ModifiedOn = modifiedOn; 
     return attendee; 
    } 

    #endregion 
    #region Primitive Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int64 AttendeeID 
    { 
     get 
     { 
      return _AttendeeID; 
     } 
     set 
     { 
      if (_AttendeeID != value) 
      { 
       OnAttendeeIDChanging(value); 
       ReportPropertyChanging("AttendeeID"); 
       _AttendeeID = StructuralObject.SetValidValue(value); 
       ReportPropertyChanged("AttendeeID"); 
       OnAttendeeIDChanged(); 
      } 
     } 
    } 
    private global::System.Int64 _AttendeeID; 
    partial void OnAttendeeIDChanging(global::System.Int64 value); 
    partial void OnAttendeeIDChanged(); 

ответ

1

Вы должны добавлять, а не присоединение, новые объекты.

Update Если вы получаете ту же ошибку, когда вы AddObject, то вам необходимо убедиться, что StoreGeneratedPattern в SSDL установлен в Identity. Дизайнер должен сделать это для вас, если ваша БД настроена правильно, и ваш провайдер ее поддерживает.

+0

Бывает на обоих AddObject и Attach. – Josh

+0

Он попадает в поле сервера SQL, и это свойство установлено. Обновлено выше, чтобы показать описание объекта. – Josh

+1

Это должно сработать. Откиньте свой код до простого случая и разместите его здесь. Что-то происходит, чего нет в вашем вопросе. –

1

Если этого элемента нет в базе данных, вам не нужно указывать контекст. Используйте только context.AddObject или context.<collection>.Add.

+0

Обновлено, чтобы показать, что ошибка возникает с помощью AddObject. – Josh