如何添加&在实体框架内更新

时间:2013-09-03 08:33:54

标签: entity-framework entity

我的模型实体框架:

public partial class T02
{
    public long ID { get; set; }
    public int F01 { get; set; }
}

表:T02

------------------------
id[Key,identity]      F01
------------------------
1       a
2       b

=============================================== ===== 我有一个按钮>代码

    public void Button_Click(object Sender, EventArgs e)
    {
        T02 T1 = new T02 { ID = 1, F01 = "x" };
        T02 T2 = new T02 { ID = 2, F01 = "y" };
        T02 T3 = new T02 { ID = 0, F01 = "g" };
        T02 T4 = new T02 { ID = 0, F01 = "h" };

        // How ID > 1 2 Update in Table & 
        // because not in table, > g , h > automatic add to Table 
        // ???
    }

我的问题是:我没有准时更新,如果T02.ID没有在表上自动添加..

我是否可以添加到没有id的表记录中,并且我使用id

更新记录

我在c#.NET 4.5上工作过。感谢

1 个答案:

答案 0 :(得分:0)

将此方法添加到Context班级:

protected virtual void InsertOrUpdate<T>(T entity, long id)
{
    if (id == default(int))
        this.Set<T>().Add(entity);
    else
        this.Entry(entity).State = EntityState.Modified;
}

可以使用以下内容:

public void Button_Click(object Sender, EventArgs e)
{
    T02 T1 = new T02 { ID = 1, F01 = "x" };
    T02 T2 = new T02 { ID = 2, F01 = "y" };
    T02 T3 = new T02 { ID = 0, F01 = "g" };
    T02 T4 = new T02 { ID = 0, F01 = "h" };

    using(var context = new MyDbContext())
    {
        context.InsertOrUpdate(T1, T1.ID);
        context.InsertOrUpdate(T2, T2.ID);
        context.InsertOrUpdate(T3, T3.ID);
        context.InsertOrUpdate(T4, T4.ID);
    }
}

一旦这个工作正常,您可以考虑在所有暴露ID属性的POCO类中实现标准接口,这样您就不必再将ID传递给方法:

public interface IId
{
    long ID { get; }
}

public partial class T02 : IId
{
    public long ID { get; set; }
    public int F01 { get; set; }
}

Context

中为您提供了更简洁的方法
protected virtual void InsertOrUpdate<T>(T entity) where T : IId
{
    if (entity.ID == default(int))
        this.Set<T>().Add(entity);
    else
        this.Entry(entity).State = EntityState.Modified;
}