实体框架1 - 如何插入涉及导航实体的记录

时间:2011-07-26 15:36:54

标签: c# asp.net entity-framework

我正在使用SQL Server,Framework 3.5,C# 我的产品表类似于id,name,created_by,group_id

created_by是外键用户

group_id是外键表单组

            PRODUCT product        = new PRODUCT();

            product.name           = txtName.Text.Trim();
            product.USER           = new USER { user_id = Session["UserID"] };
            product.GROUP         = new GROUP { group_id = 1 };

            _db.AttachTo("USERs", product.USER);
            _db.AttachTo("GROUPs", product.GROUP);
            _db.AddToLEAD_TYPE(product);
            _db.SaveChanges();

但是我在savechanges上遇到错误

  

// ObjectStateManager中已存在具有相同键的对象。现有对象处于Unchanged状态。如果对象处于添加状态,则只能再次添加到ObjectStateManager。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

以下是我解决问题的方法

        PRODUCT product        = new PRODUCT();
        product.name           = txtName.Text.Trim();
        product.USERReference  = CreateEntityReference<USER>("MyEntities.USERs", "user_id", Session["UserID"] );
        product.GROUPReference = CreateEntityReference<GROUP>("MyEntities.GROUPs", "group_id", 1 );

        _db.AddToPRODUCTS(product);
        _db.SaveChanges();

这是我的创建实体参考功能

        private EntityReference<T> CreateEntityReference<T>
            (string qualifiedEntitySetName, string keyName, object keyValue) where T : EntityObject
        {
            EntityReference<T> result = new EntityReference<T>();
            result.EntityKey = new System.Data.EntityKey(qualifiedEntitySetName, keyName, keyValue);
            return result;
        }

希望这会节省许多人的时间。