OPEN-MVC-PLUS-ENTITY-FRAMEWORK...





5.00/5 (2投票s)
Open MVC PLUS ENTITY FRAMEWORK + XML DB for WebLight Components for MVC.NET 3.0
该库旨在支持 OPEN WEBLIGHTS DBAWARE COMPONENT FOR .NET,要了解它,我将引用我上一篇关于 weblights 的文章:https://codeproject.org.cn/Articles/189276/MVC-PLUS-for-MVC-NET-3-00 在 https://sourceforge.net/projects/mvcplus/files/Presentation%20and%20Documents/ 下载关于此开放项目的吸引人的演示文稿,或从 https://sourceforge.net/projects/mvcplus/files/ 下载示例文件。
该实体框架被设计并应用于非常大规模的项目,例如两个 ERP 系统,并支持主要的 RDBMS:MSSQL SERVER 2005 及更高版本(2012 年扩展就绪)
Oracle 10G 或更高版本
MYSQL
POSTEGRESQL
INTERBASE
FIREBIRD
IXML DB
许多用户喜欢在他们的 MVC.NET 程序中使用 DataAware 模型,同时,他们可能在使用当前实体框架时遇到问题,该实体框架是开放/易于使用的,并且特别关注 MVC 模型,通过实现 MVC 模型的附加功能,例如元模型。
此外,我希望始终拥有排序/过滤且快速的数据源,而无需使用 DataTable 之类的不良且非类型化的类,这就是我们创建这个系统的原因,它诞生于几年前的一个想法,并最终变得越来越先进,
我们将视图和模型组合成一个 3D 模型,该模型可以支持内部的递归数据,始终排序,始终过滤。
它拥有自己的 ORM,并添加了许多功能,例如(大部分内置)
- 3D 模型而非扁平模型(完全不同的概念)
- 内置策略模式支持
- 更快的批量操作
- 基于策略的高级安全模型(在元模型、模型、行、列上)
- 锁定/解锁和版本控制以实现并发
- 支持许多新字段,例如 XML 字段,以新的方式处理,
- ECB(多货币,意味着用户将看到以其本国货币显示的金额,但存储不同:您输入 100 美元,但欧洲用户将看到 80 欧元)
- 单位:您输入 2 公斤,美国用户将看到 4.2 磅
还有更多。
在示例文件中,我们提供了一些关于如何使用它的样本?语法和演示文稿 + 系统的完整源代码。
这里我们有一些示例代码
Int64 s = Environment.TickCount;
for (var t = 0; t < 500; t++)
{
Test.Person.Insert();
Test.Person.Name = t.ToString() + "th Name";
Test.Person.Post();
}
Test.Person.Flash();
Test.Person.Done();
InsertLabel.Text = "500 Records are inserted in " + (s - Environment.TickCount).ToString() + " Ms";
Test = new MetaModels.Test();
我们在 Person 模型中插入了 500 条记录,在 2.66 Intel 双核系统上需要 567 毫秒。
它的语法非常类似于 Delphi,首先,您需要执行一个命令,例如 Insert、Update 或 Select,然后提交您的命令,在批量操作中,您必须刷新它们,但当您选择时,不需要刷新您的请求,最后,当您的工作完成时,您必须完成所有请求,这意味着您将清除您的请求正文。
在这个系统中,我们也有 XML 字段,但我们该如何使用它们?我们有一个处理 XML 的示例,这与所有其他可用的 XML DB 实现都不同,它在代码中内置了支持
使用和处理类似数据库模式的 WLXMLElement
var xmlelement = new WLXMLElement();
for (var T = 0; T < 200; T++)
{
xmlelement.Insert();
xmlelement["Person/Name"].Value = "RYAN";
xmlelement["Person/FamilyName"].Value = "SAMIEE";
xmlelement["Person/Age"].Value = "32";
xmlelement["Person/Age/Description"].Value = "He is yoo young";
}
//xmlelement = WLXMLElement.LoadXML(xmlelement.ToString());
代码演示了如何轻松地在 XML 元素中插入 XML 元素,只需使用 XML 路径,例如
Person/Name/X/Y
它将创建节点,将在需要的地方插入值,然后您可以通过 SaveAsFile 命令将其保存到磁盘,或者在 ORM 中,它将是一个字段,系统将把它存储为一个字段,此外,您可以基于 XML 数据在应用程序服务器上进行排序,
授权策略
您可以拥有如下的安全模型
两者都通过硬编码和 XML 映射(用于 XML 和模型)得到支持
[ReadOnly(Where="owner!=me and owner!=admin",WhichFields("Name")] [WriteOnly(Where=" owner!=admin",WhichFields("Password")] [CanWrite(Where="owner!=me and owner!=admin",WhichFields("Name")] [CanRead(Where="owner!=me and owner!=admin",WhichFields("Name")]
您可以随时通过简单的语法将它们设为只读/只写或可读/可写。
Test.Person.Update(new { name = "@EXP name+' test'" }, "");
Test.Person.Flash();
Test.Person.Done();
速度比较
在示例中,我们将此系统与常规批量操作的速度进行了比较,因为它使用了一种优化的方式来处理批量操作,其速度是常规代码的 4 到 10 倍,如下所示。
您还可以看到表达式系统如何处理事物,以及它创建的表达式树的示例。
请注意:
示例代码在本文的附件中 + OPEN MVC PLUS 的完整源代码。
批量操作,其速度比竞争对手快几倍。
表达式测试
Expression : (Name+' '+Familyname)+Replace('Ryan','R','r')
结果:Ryan Samiee ryan
您还可以看到表达式树
Expression Library 基于 Ryan Samiee Expression Library,最初于 2002 年用 C 编写(闭源),后重写为 C# 和 Java。
注意:要运行示例,请执行以下操作
解压缩后,请修改 Project TestApplication\DAL\BaseModel 中的文件
[WLMOAdapter(WLAdapterType.MSSQL, ConnectionString: "Data Source=.\\SQLEXPRESS;AttachDbFilename=O:\\WindowsFormsApplication9\\Backup4\\WindowsForms Application9\\MVCPLUSTEST.mdf;IntegratedSecurity=True;User Instance=True")]
更改粗体路径(attachdbfilename 为 MVCPLUSTEST.MDF 文件的确切路径,请注意,您需要在最新的 SQL Express 和 Visual Studio 2010 上运行此示例。
更多
在下面的文本中,您可以找到有关该系统的简要信息。
另外,请下载附件或加入 MVC PLUS,网址为 http://sourceforge.net/projects/mvcplus/
请注意:您可以根据自己的方式使用 Expression 或 XML 库,它们与 MVC PLUS Entity Framework 的核心是分开的。
MVC PLUS 是一个开源实体框架,旨在支持 OPEN WEBLIGHTS,并普遍用于 MVC 和企业应用程序,如 ERP(一些 ERP 产品大量使用其动态规范),它拥有自己开发的 ORM 系统,具有新的规范,例如
- 内置 ECB 支持
- 快速可靠的表达式库
- 内置 XML 字段支持(带 XML DB 类型)
- 快速透明的 ORM。
- 出色且快速的 DB 操作,例如您可以在一秒钟内插入 1000 条记录,这比正常的 DB 操作快 10 倍。
- 这类似于旧的 VCL,并采用了新的工程设计,以实现最快的操作。
- 模型始终处于最新状态:已排序和已过滤。
- Python 应用程序服务器触发器
- 非常适合 MVC 项目
此外,您可以轻松完成其余工作,只需设置每个业务实体的行为,它们就会完成其余工作,换句话说,系统具有透明的 ORM,可以使您的工作立即与 RDBMS 同步,甚至在客户端验证和类型也会根据您的 RDBMS 进行更改。
请下载附件文件以获取更新,您也可以通过以下地址加入 MVC Plus 项目: http://sourceforge.net/projects/mvcplus/
它比其他可用的 ORM(如 Entity Framework 和 NHibernate)具有许多优势,它可以用于所有其他项目,但在大多数情况下,您可以利用这个经过测试且稳定的系统。
- 内置动态策略模式支持
- 使用行为架构而不是创建架构
与 VCL 数据组件类似的设计
支持无状态和有状态操作
模型:(其他实体框架大多使用扁平模型)
- 多级模型
- 2D 模型(行)
- 3D(递归和行)
- 多级模型
- 合并类和视图
表达式:(示例)
- (BirthDate>'27/1/2011 and BirthDate<'27/2/2011) or BirthPlace=='TEHRAN'
@EXPR Replace(Address,'Tehran','Greate Tehran') where BirthPlace=='TEHRAN
表达式用于
- 过滤器。
- 策略和规则
- 公式字段
- 所有可能的命令
表达式命令
组 | 规范函数[21] |
聚合函数 | Avg, BigCount, Count, Max, Min, StDev, StDevP, Sum, Var, VarP |
数学函数 | Abs, Ceiling, Floor, Power, Round, Truncate |
字符串函数 | Concat, Contains, EndsWith, IndexOf, Left, Length, LTrim, Replace, Reverse, Right, RTrim, Substring, StartsWith, ToLower, ToUpper, Trim |
日期和时间函数 | AddMicroseconds, AddMilliseconds, AddSeconds, AddMinutes, AddHours, AddNanoseconds, AddDays, AddYears, CreateDateTime, AddMonths, CreateDateTimeOffset, CreateTime, CurrentDateTime, CurrentDateTimeOffset, CurrentUtcDateTime, Day, DayOfYear, DiffNanoseconds, DiffMilliseconds, DiffMicroseconds, DiffSeconds, DiffMinutes, DiffHours, DiffDays, DiffMonths, DiffYears, GetTotalOffsetMinutes, Hour, Millisecond, Minute, Month, Second, Truncate, Year |
按位函数 | BitWiseAnd, BitWiseNot, BitWiseOr, BitWiseXor |
其他功能 | NewGuid |
示例用法:(下面的 C# 代码)
- Profiles.Person.Update(new { name = "@EXP name+' test'" }, "BirthPlace=='Tehran' and Age>45");
- [FormulaField("DifferenceYears(Now,BirthDate)"]
- public int Age{get;set;}
- [ReadOnly("@WHERE owner!=CurrentUser"]
- public bool Interested{get;set;}
- Profiles.Person.Filter="Editor==ME and ";
控件和安全性
- MetaModels(相当于视图)
- 模型
- Rows
- Columns
策略支持
完全访问、只读、只写、删除
兼容
- LINQ
- 表达式查询请求
并与 WEBLIGHTS 集成作为默认支持的 DAL。
- 光标(支持多级光标)
- 延迟加载搜索
- Sort
- 过滤(支持复杂表达式)
- Group By
可扩展的表达式支持,用于其余命令。
为批量操作优化
始终排序和过滤
可用的数据库场景
- 多主/多从
- 过滤器。
- 一对一
- 一对多
- 递归
- 自递归
- 多对多
- 多对多
多主/多从
支持的类型
- 字符串
- 基数
- 浮点数
- 货币(ECB 支持)
- 单位(可兑换单位)
- GUID
- 日期时间
- 二进制
- 流(应用程序服务器和 RDBMS)
- 图像
- XML
- 自定义(公式字段)
可用的验证器
- 类型
- 最大和最小
- Range
- Scale
- 格式
- 要求
- 行
- 自定义
其他命令
- 光标(支持多级光标)
- 延迟加载搜索
- Sort
- 过滤(支持复杂表达式)
- Group By
插入 5000 条记录的示例代码(在普通的双核 2.66 Intel 机器上大约需要 3 到 4 秒才能完成)
Try{
for (var t = 0; t < 5000; t++)
{
try{
p.Person.Insert();
p.Person.Assign(new { aname = "Ryan", aFamilyName = "Ali" }, "name=aname;
familyname=afamilyname");
p.Person.Name = t.ToString() + " test ";
p.Person.FamilyName = t.ToString() + " test ";
finally{
.Person.Post();
}
}
p.Person.Flash();
}catch{
p.Person.Cancel();
}
TRY
Insert or Update Or Delete
Set Values ‘p.person.Name=“ALI”;
FINALLY
Post
Flash
CATCH
Cancel
XML 支持
除了 XDOM,还支持 XML DB
在模型中
Person["Name/MiddleName"];
XPATH and XQUERY Extensible Support
Device ["features/Supports"].Insert();
Device ["features/Supports/DeviceName"].Value="Data";
Device.Post();
过滤器/策略和表达式在其余 XML 支持中得到支持。
映射
物理 XML 映射
- 表规范
- 触发器:序列
- 存储过程:序列
- 键:序列
- 关系:序列
- 字段:序列
支持部署(安装)
逻辑 XML 模型映射
- [Connection]
- 表规范(序列)
- Python 触发器(序列)
- Python 存储过程(序列)
- 键(序列)
- 关系(序列)
- 字段(序列)
元模型 XML 映射
- 模型关系
- 配置文件和策略
- 行为
- 组件行为
模型硬编码映射(模型硬编码映射)
示例元模型
WLMOAdapter(WLAdapterType.MSSQL, ConnectionString: “@INDB”)]
[WLMOTableInfo("address;person;addresstype")]
[WLMOCommandInfo("select","", WLCommandType.ORM, WLIOMode.Read)]
[WLMOCommandInfo("update", "", WLCommandType.ORM, WLIOMode.Write)]
[WLMOCommandInfo("delete", "", WLCommandType.ORM, WLIOMode.Write)]
[WLMOCommandInfo("insert", "", WLCommandType.ORM, WLIOMode.Write)]
public class Address : WLModel<APerson>
{
[WLFField(dbFieldName: "Address.Address")]
[WLFDisplayName("ryan", Language: WLLanguages.Default)]
public string FullAddress
{
get { return (string)this["FullAddress"]; }
set { this["FullAddress"] = value; }
}
[WLFField(dbFieldName:"PersonID")]
[WLFForeignKey("Person", "PersonID")]
...
示例硬编码元模型:(下面的 C# 代码)
[WLMMDefaultProfile("Admin;@EXPR UserType=44")]
public class metamodel : WLBaseMetaModel
{
[WLMODisplay("@ADDRESS")]
[WLMOAutoCreate]
[WLMOConnectTo("Person”)]
public Address Address { get; set; }
[WLMODisplay("@PERSON")]
[WLMOAutoCreate]
public APerson Person { get; set; }
}
WEB FARMS 场景
- 所有请求都应转到同一台机器
更多
- 每个用户大约需要 20 到 30MB
- 可实现 ISO/IEC 27001