Posted on 2005-01-17 11:14
听棠.NET 阅读(13619)
评论(244) 编辑 收藏 所属分类:
SmartPersistenceLayer
自从SPL2.0发布以来,得到好多朋友的关注,SPL只有在使用后,才会真正体会到它的魅力。
其实大家也看了很多关于ORM的资料,但理论性的较多,真正在使用持久层进行开发的朋友我想也不是很多。
SPL以其小巧、易上手、资料全、示例源码,可以让大家真正的体验一下持久层开发带来的乐趣!
目前SPL发布了3.1.0.5,在数据访问选择上,有了更多的选择。
为了方便大家对SPL的讨论与交流,请在这里发表意见或签名!
感谢各位!
Feedback
呵~~回得真快,非常感谢
对这个的应急处理我的办法是在获得DataTable后
再对DataTable的DefaultView进行RowsFilter
不过,我还发现这个对SqlServer中为 bit类型 的列好像也不支持!
@alpha :
BIT型的我早已经修改了,忘了有没有发布到网上了。到时一起发布了。
聽棠你好﹐我現在有一個這樣的查詢﹐不知道可否實現
表A
有a,b,c三個欄位
表B
有a,d,e三個欄位
現在表A和表B通過a欄位關聯
想對b,c,d,e進行or查詢
形成如以下的sql
SELECT * FROM A,B
WHERE A.a=B.a and
(
A.b LIKE'%關鍵字%'
or A.c LIKE'%關鍵字%'
or B.d LIKE'%關鍵字%'
or B.e LIKE'%關鍵字%'
)
可我不管怎么用
B表的where子句都會用and連接
您問這個問題怎么解決呀?
听棠,你好。可能是同样的问题吧?
我在使用实体更新时,如:
StudentEntity student=new StudentEntity();
student.Id=5;
student.Retrieve();
if(student.IsPersistence)
{
student.Name=txtName.Text; //获取新值
student.Date=txtDate.Text;
student.Date是日期类型,但如果我想赋null值给它,该如何实现呢?
如果直接赋null 值的话,会出现“溢出”的错误,
我试了一气无果,只得再次请教。
期待你新版本的出现~~ ^_^
大哥,真的的辛苦你了,俺也是一个ASP.NET Fans,为了写一些小东东,为了偷懒,常到SourceForge 去找Framework,一个一个的测试,测试得我头晕眼花,也没有弄到个好样的。无意之中看到SPL2.0,测试了一下,俺忍不住热泪盈眶,真是太方便了,过去那走的弯路,受的委屈,都被SPL解决了。
大哥看来的确是高手中的高手,可否推荐一些你认为比较好表示层框架和业务逻辑层的框架给大家。
分析器错误信息: 访问被拒绝:“Oracle.DataAccess”。
这个是为什么?怎么没人回答?
高手指教阿!
禁用或设置 Indexing Service 服务;
检查 Bin 目录的访问权限;
设置 Temporary ASP.NET Files 目录的访问权限
SPL确实不错!!!
下载后参考你blog上的说明试用了一下,果然很方便。呵,现在很激动啊,,没一点困意了。。谢谢老大,希望你继续坚持着SPL!!因为现在它已经有了很多用户了。
也希望你能在百忙之中抽出点时间,像以前一样热心的给解答着问题。毕竟有点是生手,像我一样。
再此感谢你!
spl3.1的Condition没有了Orderby方法?介绍文字里却有。
木剑 :
真不好意思。应该是RetrieveCriteria里的OrderBy,当时写错了。
我用spl3.1做项目开发,确实减轻了不少工作量,感谢!
我运行出错
DataTable dt=OrdersEntityAction.GetOrdersEntity();
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
这是代码 结果是:未找到实例影射的对象
@csd :
你肯定是没有加载初始数据库,在我提供的Sample里,那个init事件中就有加载数据库初始信息的地方,在你没有加载的情况下,使用实体操作自然会提示未加载了。
所以建议你跟我一样放在BasePage里,其他所有要用到数据操作的都继承自BasePage,这样就可以保证都会加载了,要记住只要用到数据库的地方都要继承BasePage,因为这些实体的映射信息是放在Application里的,为了提高性能。
听棠兄:
我想问一下在ORACLE中的数据类型在classmap.xml是怎么配置,序列使主键增长该怎么配置,我用了你的生成器,但是读不出ORACLE中的数据库中表,所以CLASSMAP。XML无法生成,烦忙老兄指导一下
@大个子:
生成器连不上Oracle那估计是连接字符串有问题,你根据你本地的Oralce环境,采用正确的字符串连接。
要在Oralce中使用序列的话,应该是分两步的,第一步是从序列中报到序列值,这可以通过Query的执行Sql来执行,然后把序列值赋给相应字段,因为Oralce的序列与MS Sql Server的不一样,Sql Server的话,是可以完全由数据库自动生成的。
关于数字与实体属性的匹配,请看下面文章 ,有张表格的。
http://tintown.cnblogs.com/archive/2004/11/10/62410.html
听棠兄:
我的问题是 什么时候需要作并发处理 ?
因为你的数据库更新操作都是 先 从数据库 Retrieve 到内存,对实体作了处理后再 Save() 。 那么都可能发生并发的问题。 那么我所有的表 都要加一个 TS 的字段?
那如果不是每个Save() 都要作并发处理,什么情况下需要做并发处理呢 ?
请老兄指导一下。 谢谢!
@Cbz :
你好,在进行保存时,先Retrieve(),进行赋值,然后Save(),这其实是在一个方法中进行的,执行的速度是相当快的,发生并发的可能是非常小了,如果你要用时间戳的方式来进行并发处理,请参考我的文章 :http://tintown.cnblogs.com/archive/2005/04/04/131784.html
SPL提供了并发处理机制。
当然了,在很多情况下,对并发不是很严的项目里,没有必要非要考虑并发的。
还有一种方式就是使用事务来进行锁定,可以用SPL的实时事务功能,先进行Retrieve(),然后再Save(),这种实时事务机制,会在Retrieve()后,Commit()之前进行表锁定。http://tintown.cnblogs.com/archive/2005/04/07/132876.html
听棠兄:
多谢你的解答。
一个新问题:我用 SPL 3.2 以 ODP 的方式 连接 Oracle 出错:
? ex
{PersistenceLayer.PlException}
[PersistenceLayer.PlException]: {PersistenceLayer.PlException}
HelpLink: Nothing
InnerException: Nothing
Message: "读取数据库映射文件E:\Project\SALIS\Project\SAAC.SALIS\SALIS.WinForm\Config\DatabaseMap.xml时发生错误,请确认你的文件路径和文件格式!未将对象引用设置到对象的实例。"
Source: "PersistenceLayer"
StackTrace: " at PersistenceLayer.XmlConfigLoader.LoadDatabaseInformation() in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Core\XmlConfigLoader.cs:line 161
at PersistenceLayer.XmlConfigLoader.LoadConfig(String databaseMapFile) in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Core\XmlConfigLoader.cs:line 61
at PersistenceLayer.PersistenceBroker..ctor() in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Core\PersistenceBroker.cs:line 44
at PersistenceLayer.PersistenceBroker.Instance() in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Core\PersistenceBroker.cs:line 68
at PersistenceLayer.Setting.set_DatabaseMapFile(String value) in I:\PLTEST\PL\SPL_WebTest\PersistenceLayer\Setting.cs:line 120
at Use_SPL.Use_SPL_Load(Object sender, EventArgs e) in E:\Project\SALIS\Project\SAAC.SALIS\SALIS.WinForm\Use_SPL.vb:line 73"
TargetSite: {System.Reflection.RuntimeMethodInfo}
我的 DatabaseMap.xml 是这样写的:
<?xml version="1.0" encoding="utf-8"?><map>
<database name="SALIS_DB" type="ODP">
<parameter name="Password" value="salis" />
<parameter name="User ID" value="salis" />
<parameter name="Data Source" value="EAMDB" />
<parameter name="Persist Security Info" value="False" />
<classMapFile path="ClassMap.config" />
</database></map>
但是 换成 type="Oracle" 的方式 就没有问题。
我分析的原因是:
我的数据库是10g的,所以我用的 是 ODP.net v10.2.0.1。 但是我引用你的 PersistenceLayer.dll 后 , 我发现 Oracle.DataAccess.dll 自动改变为 9.2 。 然而用 9.2 的 Oracle.DataAccess.dll 是不能连接上 10g 的。
请看看我分析的是否正确。
我能理解你把Oracle.DataAccess.dll 和 PersistenceLayer.dll 一起发布使因为要实现 跨数据库的特性。 所以给一点小小的建议 : 下次发布时 这些附属的 dll 都使用最新的版本。 因为 像 Oracle.DataAccess.dll 的高版本是可以连接 比他版本低的数据库, 反之则不行 。
谢谢!
Cbz
@Cbz :
你好,很对,我用的是OPD.NET 9.2的,哈哈,看来我是要升级了。你能把ODP.NET 10发给我吗?谢谢:tintown_liu@hotmail.com
听棠兄:
我看了你那张对应的数据对应表,发现没有对oracle 里的大文本clob,nblob等的大数据对象,不知道SPL如何处理,我用string对应 发现如下错误
异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。数据类型不被支持。
听棠兄:
我发现上面 的错误是由于 oledb 的访问不支持ORACLE里的大类型字段,可能需要改一下访问方式 我用的 是ORACLE 10G 的,而你的ORALCE 可能只是支持9I的,期待升级中,如过你那里现在还没有 ORACLE 10G 的Oracle.DataAccess.dll ,我可以发给你
@疾行者 :
对CLOB,NBLOB数据类型是不支持的。二进制的由于读取有问题,SPL是不支持的,我一般不提倡存在数据库里的,影响性能,而是存在文件上,数据库里只是加个连接而已。
SPL确实不错!!! 这里有两个问题想请教。
1.可否增加对实体数据的有效性验证功能。例如某字段的最大长度验证,不允许为空验证,是否是数字验证等;或者在生成的classmap.xml文件中增加字段的数据类型、最大长度(对于string类型),是否允许为空等,方便使用者自行验证。
2.所有的类映射都保存到一个classmap.xml中,并且是在程序启动时,一次读入内存。如果该文件很大,等待时间会很长,可不可以只在对象保存或读取时,动态映射。
@jaclon :
你好,你的问题是非常好的。先表示谢谢!
第一个关于验证,其实是这样的,这种验证是属于UI表示层的,由于你的UI层可能是ASP.NET也可能是WinForm,因此SPL要处理这种验证也是比较麻烦的,最多也就是抛出一个SPL自定义的异常给你,你也要根据这异常来进行处理,因此我是觉得SPL就算实现这种异常抛出,你的程序判断反而会更加麻烦。因为SPL是无法操控你的UI层的。
第二个,一次性载入是为了提高性能,动态映射的话,在每次操作时都要去判断,我想在操作比较频繁的情况下,效率反而会变低,由于XML文件被存于内存中时,用的是SPL自定义的一个类,而不是XML的类,就算ClassMap.xml文件比较大,其实读到内存里也占不了多少的。
昨晚我把您的教程全部打印下来,仔细看了一遍,很好用,对于小的项目足够用了,可以大大提高效率,谢谢!
支持!!!
使用了SPL之后,在编译时总提示
未能找到依赖项“ICSharpCode.SharpZipLib”。
请问怎么解决,有没有什么影响
@Voyages:
你好,一点关系也没的,那是因为引用的MySql.NET引擎里要用的一个压缩的东西,没有一点关系的。。你放心好了。下次我找个不需要ICSharpCode.SharpZipLib的MySql.NET引擎:)
下面是我用NUnit做的一个测试,其中Condition倒是没问题,但是RetrieveCriteria 的Top却没有实现,是不是spl的一个bug?我用的是spl3.2,测试代码如下:
[Test]
public void GetSqlString()
{
RetrieveCriteria rc = new RetrieveCriteria(typeof(UserEntity));
Condition c = rc.GetNewCondition();
c.AddEqualTo(UserEntity.__EMAIL,"jas04@21cn.com");
c.AddEqualTo(UserEntity.__ICON,"AAA");
Condition c1 = rc.GetNewCondition();
c1.AddEqualTo(UserEntity.__NICKNAME,"AAAq2");
rc.OrderBy(UserEntity.__DATE,false);
rc.Top = 10;
UserEntity ue1 = rc.AsEntity() as UserEntity;
Assert.AreEqual(ue1.Id,"632733048109344x",rc.SqlString+"::"+rc.Top.ToString());
}
下面是NUnit的出错提示:
UserTest.GetSqlString : SELECT [t_User].[u_Id] AS [Id],[t_User].[u_Nickname] AS [Nickname] FROM [t_User] WHERE ([t_User].[u_Email]='jas04@21cn.com' AND [t_User].[u_Icon]='AAA') OR ([t_User].[u_Nickname]='AAAq2') ORDER BY [t_User].[u_Date] ::TOP =10
String lengths differ. Expected length=15, but was length=16.
Strings differ at index 15.
expected: <"632733048109344">
but was: <"632733048109344x">
---------------------------^
TOP确实是设置为10,但RetrieveCriteria返回的SqlString却没有Select Top 10,听棠兄能够测试一下,多谢了。
@xpilot :
你好,非常感谢你对SPL的如此用心啊,确实是这样的,RC的SqlString属性执行时,是把拼装的SQL语句返回了,而那个TOP的功能不是在拼装SQL时生成的,而是在SQL完全结束后,在提交数据库执行时才进行判断的,因为不同的数据库对TOP的处理不同的,因此我是放在数据提交时对SQL再次进行TOP补充功能,因此rc.SqlString中确实没有出来,但是在提交数据库执行时会补上的,因此你执行是没有问题的!!!
哈哈,先这样用,我看到时能不能把SqlString的属性也把TOP拼装在一起吧!!
谢谢你,你果然非常用心哦!!!
原来如此啊:),那我就更放心使用了,这几天一直在用spl,确实是个不错的东西,够轻量级,正想作个小项目,之前也研究过NH和Gentle.net之类的,感觉这些ORM还是太重,特别是关系之间映射之后,如果不小心处理,性能可能是个大问题,不适合中小项目使用,spl轻巧的特点正满足我的要求,再次感谢听棠提供这么好的东西,真是减少了不少重复劳动的强度,感谢感谢:)
不知道在查询的时候能不能返回DataReader?
有人可以给我一个 ODP.NET for oracle9.2 的安装程序吗?
谢谢!!
lbz5705@163.com
or
bobchart@gmail.com
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
连接数据库失败!参考:未指定的错误
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: PersistenceLayer.PlException: 连接数据库失败!参考:未指定的错误
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[PlException: 连接数据库失败!参考:未指定的错误]
PersistenceLayer.XmlConfigLoader.LoadDatabaseInformation()
PersistenceLayer.XmlConfigLoader.LoadConfig()
PersistenceLayer.PersistenceBroker..ctor()
PersistenceLayer.PersistenceBroker.Instance()
PersistenceLayer.Setting.set_DatabaseMapFile(String value)
CoPro.BasePage.OnInit(EventArgs e) in C:\Project\CoPro\BasePage.cs:100
CoPro.Default.OnInit(EventArgs e) in c:\project\copro\default.aspx.cs:54
System.Web.UI.Control.InitRecursive(Control namingContainer) +241
System.Web.UI.Page.ProcessRequestMain() +197
听棠你好:
我在看你的spl关于多账套的地方有个问题不清楚
我们现在的系统也要启用多账套功能
即用户登录后,我们可以根据配置档取得他的资料库名称,然后选择不同的资料库进行操作。
请问DatabaseMap.xml怎么设置呀?
database name="Rsun_Cooperation"
和ClassMap.xml中的database是写死的,而我其它账套的架构也一样,怎么设置?
另:多账套功能可能不修改以前的程式吗?即不要在spl的每个操作中加上DatabaseName这个属性?
谢谢~
对了,我的mail是:tsoukw@163.com
发生什么事了
给听棠.NET 发mail也没有人回,是不是这个spl彻底的停止了,并停止共享了?
最近项目要用到SPL,现在正在学呢.
听棠是常熟的?我也是啊
未找到名为[BasicinfoEntity]实体类相对应类影射信息!
老是出现这样的错误,无论重启电脑还是重启IIS都无法解决
明明找到了classMap
这种错误老是出现,,,,有时候什么代码与没有改就好了
请指教。。。
我也是湖南的。。
你好,我就是听棠,我看到你在我BLOG上的留言了,你的[BasicinfoEntity]实体肯定在ClassMap里不存在,或者是你访问的页面没有进行SPL初始化吧!每个页面在判断没有初始化时应该马上进行一次重初始化,由于是WEB项目,Application经常会丢失的。你仔细查一下!肯定是你的配置上出了问题了!
估计单凯的[BasicinfoEntity]肯定是存在的,不过单凯同志很有可能在Application_Start()中进行的初始化,那样,经常会出现这个提示。我也碰到过,曾经很苦恼,后来在BasePage中进行初始化,解决了该问题.
我一直是在BASEPAGE中进行初始化的。谢谢听棠兄的热心回帖,可能是哪个地言有错我一直没有找到。现在重写了一遍代码,解决了。
请将最新的版本发给我一份,dcyly2001@163.com
"拜读"一下你的大作。
谢谢!
在使用ROBOT的时候发现有一个checkBOX,选择是否保存在内存。
能否解释一下,我对这个不太清楚,我很关心性能,
请将最新的版本发一份给俺,想学习学习,谢谢!
jvuentus_0403@126.com
我也想要 ,哪里有的下啊
或者哪位大侠传一份给我吧
billy_wolf@163.com
3Q
看了半天,就是没找到下载的地方... -_-||
qlwuu@163.com
SPL不继续更新了吗?使用SPL连接informix时,读取的中文数据是乱码,怎么回事,怎么解决,十分感谢,请听棠显身吧,这么多人关注呢
其實我很像想知道為什麼SPL會停擺了,我來自台灣,我也一直在使用SPL,它使我的工作效率提高不少,聽棠大哥可以現身說法一下嗎?
哪里可以下载?或者发一份给我行吗?
effun@sina.com
没想到听棠是个这么不负责的人,当初那么多人劝其开源,他就是不开,好了,现在干脆丢一边不管了,唉!
关注!
我的mail:leellyp@gmail.com
那位可以发我一份
请问在三层架构中如何使用spl?有没有这方面的例子,如果有请给我发一份 好吗? 谢谢!
我的email是zdawen2003@tom.com
连oracle出错。
读取数据库映射文件E:\test\Config\DatabaseMap.xml时发生错误,请确认你的文件路径和文件格式!未将对象引用设置到对象的实例。
DatabaseMap.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<map>
<database name="JGYW" type="Oracle">
<parameter name="Password" value="jgywuser" />
<parameter name="User ID" value="jgywuser" />
<parameter name="Data Source" value="WinstarB" />
<parameter name="Persist Security Info" value="False" />
<classMapFile path="ClassMap.config" />
</database>
</map>
晕,这个是什么问题。
RetrieveCriteria rc=new RetrieveCriteria(typeof(Model.MBanGong));
rc.OrderBy("UpdateDate", false);
rc.Top=20;
把TOP和orderby一起使用。top功能无效。必须要删除orderby才行输出了下sql里面没有select top
忘老大查实啊。
我要一份,想学习学习,谢谢
td.net@hotmail.com 也是我的MSN
将一个使用中的问题发到tintown的邮箱了,可是没有回,是不是没有收到啊?
按你原来的方式,每次修改前要执行Retrieve()方法,判断记录是否存在,如果存在则IsPersistent为TRUE,并把这条记录完整的取出赋给对象,最后执行Save()方法进行保存。
据我的测试,保存的时候是把所有字段重新更新一遍。
我觉得这种做法是很影响性能,本来只是对一条记录的某个字段进行更新,结果要把这条记录完整的取出来,再全部字段更新一次,这种做法很不可取。
我的建议如下:
更新记录的时候,可以把IsPersistent设为TRUE,用户对需要更新的字段进行赋值,在执行Save()方法的时候,对更新对象进行判断,有值的字段才更新,为Null值的字段不更新。
在客户端登录sql软件时,出现"未找到名为[dot_systemEntity]实体类相对应类影射信息"提示,请问什么原因?
谢谢
听棠大哥你好啊
我是刚开始决定使用SPL的一新手
我想问一下的是
其中的资源释放完全是自动的么?还是需要写代码完成?
比如数据库连接?比如对象的销毁?
玩***想赢钱的朋友 请联系我吧 !电话13035042533 打***包赢!最新★幻影上分器上市★详情请登陆www.chcen.com/hy以前也许你被别人骗过,可是那你自己的选择错误。你如需要本公司的产品。你可以来本公司就地考察满意在购买。全国范围可以货到付款。这里有全国价格最底效果最好的上分器,定位器。。
问:在webserics里能用吗??
string DatabaseXml="Config/DatabaseMap.xml";
Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml);
就刚开始说:上面二句话的应该写在哪里呢???
在每个获取实例时都要写下?还是什么操作?
服务器win2003,运行asp.net2.0
经常发生初始信息丢失的问题,我在我的母板页的pageload中加入了
if(Application["DatabaseSetting"]==null || Application["DatabaseSetting"].ToString()!="Y")
{
string DatabaseXml="Config/DatabaseMap.xml";
PersistenceLayer.Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml);
Application["DatabaseSetting"]="Y";
}
但还是经常出现找不到映射的数据库问题。对此我作了一个实验。2个aspx页面,1个页面A的pageload中加入上面的语句,另一个页面B未加入。当运行页面A后再访问页面B则一切正常。如果先运行页面B,则提示错误:"找不到名为***的数据库".这时再运行页面A,则还是出现这个:"找不到名为***的数据库"的错误。
我监视页面A的代码运行,的确执行了string DatabaseXml="Config/DatabaseMap.xml";
PersistenceLayer.Setting.Instance().DatabaseMapFile=Server.MapPath(DatabaseXml); 这个语句。但是好像没有起作用,执行实体操作时,仍然提示:"找不到名为***的数据库"的错误。
照理说我重新设置了数据库初始化信息,可是好像根本未起作用。
情况好像是这样的只要出现过一次:"找不到名为***的数据库"的错误"后,随后再设置初始信息而没有用。
最后只能重起应用程序池才能恢复。
请听棠老大给个解决方案,我实在是没办法了,又不想放弃SPL,唉!!!
SPL有没有把实体名转化成映射的表的表名,
实体属性转化成字段名的方法啊?
因为我用SPL写了个自己用的分页组件,自定义SQL语句的,我想如果数据库表名或者字段名变化了,那样导致SQL语句的改变.
如果让已经重新配置的SPL返回映射了的表名和字段名,那样我就可以不用改SQL了啊
我来晚了,才看到这个spl想学习去看到听棠大哥好久没回复了。
我得邮箱mui7788@hotmail.com 期望获得一份新的spl,想学习一下。
我的程序也经常出现“找不到名为***的数据库信息”的错误,有时间是好的,有时间就不行了。都折腾了我两个星期了,重启动应用程序,在BasePage页里也加了“if(Application["DatabaseSetting"]==null || Application["DatabaseSetting"].ToString()!="Y") "这句话,重启IIS都试过了,还是解决不了。请棠大哥帮帮忙啊!!
听棠兄,加我QQ:280306530!!!希望交流!!
关于多级主从表操作处理!!!
大哥写的框架不错!!!!
问一下听棠,在用query执行存储过程时,首先要得到IDataParameter参数,这个参数的Direction 设置为ParameterDirection.Output,可是用
public static DataTable RunProcedure(string,IDataParameter[],string);
执行后,这个参数的值没有改变。我怎样才能得到这个参数的值?谢谢
很感谢听棠兄提供这么实用的spl,对我的工作有很大帮助!
在使用的时候发现小的问题,希望使用spl的朋友一定要留意下,默认生成的DatabaseMap.xml,和ClassMap.xml这两个文件是XML文件,通过web可以直接打开的,在网站上直接访问这两个文件,会暴露数据库连接帐号密码,和数据库详细结构的。对网站的安全有很大的隐患。
建议大家使用的时候一定要把DatabaseMap.xml,和ClassMap.xml文件改名,并且把格式由xml格式改成.config格式,.config格式是不能直接访问到的。
@henq
突然觉得你这个问题确实很严重....
不过我都放APP_DATA的(这个文件夹访问不了的) 希望其他人小心一点了
SPL对ORACLE可以说是不支持~都快把我改晕了,还不能用~
lz,请教一下.
SPL能否实现,访问动态生成的table?
谢谢.
我对你的敬仰之情如滔滔江水。能否能给我页发1个啊
bjml320@126.com
我对你的敬仰之情如滔滔江水 再次感谢楼主如此的无私奉献 谢谢
若数据库表的某列为uniqueidentifier类型,生成的实体类中对应属性是Guid类型,用UpdateCriteria更新时会出错该Guid类型的列就会出错,且在抛出的Exception中看不到相关信息(在将其转换为SmartPersistenceLayer自定义异常时屏蔽了?)。
若数据库表的某列为uniqueidentifier类型,生成的实体类中对应属性是Guid类型,用UpdateCriteria更新该Guid类型的列就会出错,且在抛出的Exception中看不到相关信息(在将其转换为SmartPersistenceLayer自定义异常时屏蔽了?)。
若数据库表的某列为uniqueidentifier类型,生成的实体类中对应属性是Guid类型,用UpdateCriteria更新该Guid类型的列就会出错,且在抛出的Exception中看不到相关信息(在将其转换为SmartPersistenceLayer自定义异常时屏蔽了?)。
----这个为什么没有回复啊,大哥看看是什么原因引起的。
@Austin leng
我现在吃薏米已有一个月了,这两天很痒啊!真是很烦呢!有谁告诉我一下脸很痒有点红是不是快好了啊?好像有点脓包型的,有点透明啊!谢谢啊
BKMusic是你写的吗?那里有个PersistenceLayer,是不是现在这个SmartPersistenceLayer?有没有这个类的解析啊?