java中怎么往集合类set里添加数据??

java中怎么往集合类set里添加数据??,第1张

java中往集合添加数据调用add();方法就行

//第一步先创建一个set集合的子类

HashSet has=new HashSet<>()

//给set集合添加的方法是add()

has.add(args)

资料拓展:

Collection接口可以存放重复元素,也可以存放不重复元素。List可以存放重复元素,Set就是不重复的元素。 

通过元素的equals方法,来判断是否为重复元素。 

Set集合取出元素的方式可以采用:迭代器,增强 for

$User = M('User')

$User->create() //创建User数据对象

$User->status = 1 // 设置默认的用户状态

$User->create_time = time() // 设置用户的创建时间

$User->add() // 把用户对象写入数据库

这个是官方的说明文档里的,add之前先create一下

最近在开发一个项目,在实现某个模块数据的插入 *** 作时(底层数据库的交互采用的是EF),发现无论如何数据都不能插入成功,把数据拷贝出来放到数据库中执行Sql语句时却能正确插入,下面给出代码片段

public int InsertWithFundInfo(F_WithFunding_Info withinfo)

{

int res = 0

using (var context = new RenRenChaoContext())

{

context.F_WithFunding_Info.Attach(withinfo)

return res = context.SaveChanges()

}

}

核心也就是两段代码,就是不知道问题出在了哪里。后来想起EF插入数据还有一个Add方法,于是抱着侥幸的心理试了试,结果竟然成功了。

public int InsertWithFundInfo(F_WithFunding_Info withinfo)

{

int res = 0

using (var context = new RenRenChaoContext())

{

context.F_WithFunding_Info.Add(withinfo)

//context.F_WithFunding_Info.Attach(withinfo)return res = context.SaveChanges()

}

在网上搜了一番,发现虽然两者都可以用来插入数据,不过还是有一些细微的差别。

在讲解差别之前,我们先来看下命名空间下的描述实体所处状态的枚举类型EntityState:

// 摘要:

//实体对象的状态。

[Flags]

public enum EntityState

{

// 摘要:

// 对象存在,但未由对象服务跟踪。在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。通过调用 System.Data.Objects.ObjectContext.Detach(System.Object)

// 方法从上下文中移除实体后,或者使用 System.Data.Objects.MergeOption.NoTrackingSystem.Data.Objects.MergeOption

// 加载实体后,该实体也会处于此状态。

Detached = 1,

//

// 摘要:

// 自对象加载到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改。

Unchanged = 2,

//

// 摘要:

// 对象已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。对象是通过调用

// System.Data.Objects.ObjectContext.AddObject(System.String,System.Object)

// 方法添加到对象上下文中的。

Added = 4,

//

// 摘要:

// 使用 System.Data.Objects.ObjectContext.DeleteObject(System.Object) 方法从对象上下文中删除了对象。

Deleted = 8,

//

// 摘要:

// 对象已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。

Modified = 16,

}<p></p>

这五种状态分别是:Detached-游离;UnChanged-没有变化;Added-添加;Deleted-删除;Modified-编辑。Detached状态下的Entity不会被上下文(context)所捕获(track)。当SavaChanged()方法执行期间,他会查看当前Entity的EntityState的值,决定是去新增(Added)、修改(Modified)、删除(Deleted)、什么也不做(UnChanged)。

1.Attach()

Attach在 微软的中文翻译中是附加,不同于Add方法的添加,她是将一个处于Detached的Entity附加到上下文,而附加到上下文后的这一Entity的State为UnChanged。传递到Attach方法的对象必须具有有效的EntityKey值。如果该对象不具有有效的EntityKey值,请使用AttachTo方法指定实体集的名称。

2、Add()

MSDN的解释:Add方法将对象将一个对象添加到集合中,添加到EntityCollection并创建两个对象之间的关系。当源对象附加到ObjectContext实例时,方法也将对象添加到ObjectContext当调用SaveChanges时,此 *** 作转换为插入到数据源中的 *** 作。

自我理解:ObjectContext类的Add()方法的作用就是将一个Entity的State修改为Added,这样在SavaChanged()方法就会将实体新增到数据库当中

这样,在上面的程序中通过调用Attach()方法只能把对象添加到了对象上下文中(此时对象的状态已经是Unchanged的),执行SaveChange()方法并不能真正添加到数据库中去。要想真正执行还需要添加一个修改实体状态的代码。

context.ObjectStateManager.ChangeObjectState(withinfo,EntityState.Added)

调用Add()方法时其实已经隐藏了修改实体的状态为Added的这个 *** 作,执行SaveChange()方法就可以进行新增的 *** 作。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11532285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存