我想了很多次,现在我们有 Linq 和其他特定于 CLR 语言的内置搜索、排序和其他对表、集合和对象的功能,为什么不拥有“SQL Server”或者更确切地说称之为“CLR Server” (不仅是 OOP 服务器,还有CLR 3.5)这将是一个 CLR(或 COM)DLL,它公开数据,允许用户直接在它上面进行 linqing;这将节省大量的现金痛苦,用两种不同的语言开发的时间等等。我不是说(上帝保佑)抛弃 SQL,它只是在我脑海中闪过很多次,我想让我们听听社区怎么说。
当然,这个想法并不是全新的,FoxPro 中有这样的(与我的想法不同)数据库。但我说的是一个纯 CLR .NET 3.5+ DB,它允许外部访问 DLL,甚至不应该生成 SQL 查询,整个系统应该以不同的方式工作。
插入更新和删除应该有额外的 Linq 关键字,但它们都应该是“Linq 样式”。
我 100% 肯定微软之前一直在考虑这个问题,也许他们有性能考虑和更多的 IDK,让我听听你的意见,我个人认为今天使用 .NET 3.5-4.0 如果我们会有集合处理、扩展方法等。在将所有数据视为对象的服务器中,它可能真的很酷(关于编码,再一次,不知道性能如何)。
你说什么?我希望这个问题是在正确的地方提出的,请提前接受我的道歉,如果不属于这里,请发表评论,我将删除它。
对不起这个糟糕的例子,但请理解:
Module Module1
Sub Main()
ClrServer.MyDataBase.ObjectContext.MyTables.Add(New ClrServer.MyDataBase.MyTable)
Try
ClrServer.MyDataBase.SaveChanges()
Catch e As ClrServer.UpdateException
End Try
Dim x = From a In ClrServer.MyDataBase.ObjectContext.MyTables Where a IsNot Nothing
Dim y = From a In ClrServer.MyDataBase.ObjectContext.MyOtherTables Where a IsNot Nothing
Dim z = From a In ClrServer.MyDataBase.ObjectContext.MyFreakingTables Where a IsNot Nothing
'So far no access to server made, the local maintainer hold up the request
'Connection to server is going to be made in the next line
'and previous 3 queries will be loaded then.
ClrServer.MyDataBase.ObjectContext.Execute()
End Sub
End Module
'This is server side code, there should be internal ways to connect to real data when executing.
Namespace ClrServer
Namespace MyDataBase
Public Class MyTable
End Class
Module ObjectContext
Public MyTables As List(Of MyTable)
Public Sub SaveChanges()
End Sub
End Module
End Namespace
End Namespace
然后我们可以导入命名空间并使用 ObjectContext 内联。请不要说“坏代码”,因为它是坏代码,我只是在 Stackoverflow 所见即所得编辑器中写了一个糟糕的伪示例,只是为了让你明白我的意思。