我的模型实体框架:
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上工作过。感谢
答案 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;
}