Simple Entity Framework 4 добавление объекта - PullRequest
1 голос
/ 13 ноября 2010

У нас есть приложение MVC, которое создает модели сущностей и сохраняет их в сеансе. Позже мы хотим зафиксировать это в базе данных. Просто пытаюсь сделать

db.Attendees.AddObject(attendee);

выдает ошибку

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

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

Вот описание Attendee в модели Entity Framework ... оно попадает в БД SQL Server 2008

[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();

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

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

1 голос
/ 13 ноября 2010

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

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

...