Model view controller 简单实体框架4添加对象

Model view controller 简单实体框架4添加对象,model-view-controller,entity-framework-4,session-variables,Model View Controller,Entity Framework 4,Session Variables,我们有一个MVC应用程序,它创建实体模型并将它们存储在会话中。稍后,我们要将这些提交到数据库。只是想做一个 db.Attendees.AddObject(attendee); 抛出错误 The EntityKey property can only be set when the current value of the property is null. 实体键只是一种简单的long类型,是数据库中的一个标识列。我们错过了什么?这似乎是一件很简单的事情?为了让事情顺利进行,我们必须创建对象

我们有一个MVC应用程序,它创建实体模型并将它们存储在会话中。稍后,我们要将这些提交到数据库。只是想做一个

db.Attendees.AddObject(attendee);
抛出错误

The EntityKey property can only be set when the current value of the property is null.
实体键只是一种简单的long类型,是数据库中的一个标识列。我们错过了什么?这似乎是一件很简单的事情?为了让事情顺利进行,我们必须创建对象的副本,然后保存副本。您能否将实体框架模型放入会话中,将其取出,然后保存它们

以下是实体框架模型中的与会者描述……它正在访问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();
[EdmEntityTypeAttribute(NamespaceName=“Model”,Name=“Attendee”)]
[可序列化()]
[DataContractAttribute(IsReference=true)]
公共部分类与会者:EntityObject
{
#区域工厂法
/// 
///创建新的Attendee对象。
/// 
///AttendeeID属性的初始值。
///FirstName属性的初始值。
///LastName属性的初始值。
///电子邮件属性的初始值。
///CreatedBy属性的初始值。
///CreatedOn属性的初始值。
///ModifiedBy属性的初始值。
///ModifiedOn属性的初始值。
public static Attendee CreateAttendee(global::System.Int64 attendeeID,global::System.String firstName,global::System.String lastName,global::System.String电子邮件,global::System.String createdBy,global::System.DateTime createdOn,global::System.String modifiedBy,global::System.DateTime modifiedOn)
{
Attendee Attendee=新与会者();
attendee.AttendeeID=与会者ID;
attendee.FirstName=FirstName;
attendee.LastName=LastName;
attendee.Email=电子邮件;
attendee.CreatedBy=CreatedBy;
attendee.CreatedOn=CreatedOn;
attendee.ModifiedBy=ModifiedBy;
attendee.ModifiedOn=ModifiedOn;
返回与会者;
}
#端区
#区域基本属性
/// 
///没有可用的元数据文档。
/// 
[EdmScalarPropertyAttribute(EntityKeyProperty=true,IsNullable=false)]
[DataMemberAttribute()]
公共全局::System.Int64 AttendeeID
{
得到
{
返回与会者ID;
}
设置
{
如果(_attendeid!=值)
{
OnAttendeeIDChanging(值);
ReportPropertyChange(“与会者ID”);
_AttendeeID=StructuralObject.SetValidValue(值);
ReportPropertyChanged(“与会者ID”);
OnAtEndeeIdChanged();
}
}
}
私有全局::System.Int64\u attendeid;
部分无效的TENDEEIDCHANGING(全局::System.Int64值);
部分无效的TendeeIdChanged();

您应该添加而不是附加新对象


更新如果在
添加对象
时出现相同的错误,则需要确保SSDL中的
存储生成模式
设置为
标识
。如果数据库设置正确且提供商支持,则设计师应为您执行此操作。

如果数据库中不存在该项,则不执行此操作不需要调用context.Attach,仅
context.AddObject
context..Add

同时发生在AddObject和Attach上。它击中了一个SQL server框,并且该属性已设置。上面已更新以显示对象的描述。应该可以这样做。将代码简化为一个简单的案例,并将其发布到此处。发生了一些不在y中的事情我们的问题。宾果,是在向更高层次的关系中添加一个对象,这会把事情搞砸。谢谢你的见解。