mirror of
https://github.com/dotnetcore/Util.git
synced 2026-10-28 19:18:08 +08:00
258 lines
7.2 KiB
Plaintext
258 lines
7.2 KiB
Plaintext
<%@ Template Language="C#" TargetLanguage="C#" Debug="True" Encoding="UTF-8" %>
|
|
|
|
<%@ Assembly Src="..\..\..\Common\Model.cs" %>
|
|
<%@ Assembly Src="..\..\..\Common\Extensions.cs" %>
|
|
|
|
<%@ Import Namespace="System.Collections.Generic" %>
|
|
<%@ Import Namespace="System.Linq" %>
|
|
<%@ Import Namespace="System.Text" %>
|
|
<%@ Import Namespace="System.Text.RegularExpressions" %>
|
|
|
|
<%@ Import Namespace="SchemaMapper" %>
|
|
|
|
<%@ Property Name="Entity" Type="SchemaMapper.Entity" %>
|
|
<%@ Property Name="Namespace" Type="System.String" %>
|
|
<%-- Safe类名 --%>
|
|
<% string SafeClassName = Entity.ClassName.ToSafeName(); %>
|
|
<%-- 描述 --%>
|
|
<% string Description = Entity.Description; %>
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
using <%= Entity.GetNamespace(Namespace,"Domain","Models") %>;
|
|
|
|
namespace <%=Namespace%>.Data.Mappings.<%= Entity.TableSchema %>.PgSql {
|
|
/// <summary>
|
|
/// <%= Description %>映射配置
|
|
/// </summary>
|
|
public class <%= SafeClassName %>Map : Util.Datas.Ef.PgSql.AggregateRootMap<<%= SafeClassName %>> {
|
|
/// <summary>
|
|
/// 映射表
|
|
/// </summary>
|
|
protected override void MapTable( EntityTypeBuilder<<%= SafeClassName %>> builder ) {
|
|
builder.ToTable( "<%= Entity.TableName %>", "<%= Entity.TableSchema %>" );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 映射属性
|
|
/// </summary>
|
|
protected override void MapProperties( EntityTypeBuilder<<%= SafeClassName %>> builder ) {
|
|
<%
|
|
foreach(var p in Entity.Properties)
|
|
{
|
|
Response.Write(PropertyExpression(p));
|
|
}
|
|
%>
|
|
<%if(Entity.IsTreeEntity()){%>
|
|
builder.Property( t => t.Path ).HasColumnName( "Path" );
|
|
builder.Property( t => t.Level ).HasColumnName( "Level" );
|
|
<%}%>
|
|
}
|
|
}
|
|
}
|
|
<script runat="template">
|
|
|
|
public string PropertyExpression(Property property)
|
|
{
|
|
bool isString = property.SystemType == typeof(string);
|
|
bool isByteArray = property.SystemType == typeof(byte[]);
|
|
bool isDecimal = property.SystemType == typeof(Decimal);
|
|
|
|
if( property.ColumnName.ToLower() == "isdeleted" )
|
|
return " builder.HasQueryFilter( t => t.IsDeleted == false );\r\n";
|
|
|
|
if( property.IsKey == false )
|
|
return string.Empty;
|
|
|
|
if( property.ColumnName.ToLower() == "version" && isByteArray )
|
|
return string.Empty;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine(" //" + property.Description);
|
|
|
|
sb.Append(' ', 3 * 4);
|
|
sb.Append("builder.Property(t => t.");
|
|
if( property.IsPrimaryKey.SafeValue() && property.IsForeignKey.SafeValue() == false )
|
|
sb.Append("Id");
|
|
else
|
|
sb.Append(property.PropertyName);
|
|
sb.Append(")");
|
|
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".HasColumnName(\"");
|
|
sb.Append(property.ColumnName);
|
|
sb.Append("\")");
|
|
|
|
if (property.IsIdentity == true)
|
|
{
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)");
|
|
}
|
|
else if (property.IsAutoGenerated == true)
|
|
{
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)");
|
|
}
|
|
sb.AppendLine(";");
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
public string ManyToManyExpression(Relationship relationship)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
// sb.AppendLine(" //" + Entity.GetOtherDescription(relationship.OtherEntity ));
|
|
//
|
|
// sb.Append(' ', 3 * 4);
|
|
// sb.Append("builder.HasMany(t => t.");
|
|
// sb.Append(relationship.ThisPropertyName);
|
|
// sb.Append(")");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 4 * 4);
|
|
// sb.Append(".WithMany(t => t.");
|
|
// sb.Append(relationship.OtherPropertyName);
|
|
// sb.Append(")");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 4 * 4);
|
|
// sb.Append(".Map(m =>");
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 4 * 4);
|
|
// sb.Append("{");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 5 * 4);
|
|
// sb.Append("m.ToTable(\"");
|
|
// sb.Append(relationship.JoinTable);
|
|
// sb.Append("\", \"");
|
|
// sb.Append(relationship.JoinSchema);
|
|
// sb.Append("\");");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 5 * 4);
|
|
// sb.Append("m.MapLeftKey(");
|
|
// sb.Append(relationship.JoinThisColumn.ToDelimitedString(", ", "\"{0}\""));
|
|
// sb.Append(");");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 5 * 4);
|
|
// sb.Append("m.MapRightKey(");
|
|
// sb.Append(relationship.JoinOtherColumn.ToDelimitedString(", ", "\"{0}\""));
|
|
// sb.Append(");");
|
|
//
|
|
// sb.AppendLine();
|
|
// sb.Append(' ', 4 * 4);
|
|
// sb.Append("})");
|
|
//
|
|
// sb.Append(";");
|
|
// sb.AppendLine();
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
public string RelationshipExpression(Relationship relationship)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.AppendLine(" //" + Entity.GetOtherDescription(relationship.OtherEntity ));
|
|
|
|
sb.Append(' ', 3 * 4);
|
|
|
|
if (relationship.ThisCardinality == Cardinality.One)
|
|
{
|
|
sb.Append("builder.HasOne(t => t.");
|
|
sb.Append(relationship.ThisPropertyName);
|
|
sb.Append(")");
|
|
}
|
|
else if (relationship.ThisCardinality == Cardinality.ZeroOrOne)
|
|
{
|
|
sb.Append("builder.HasOne(t => t.");
|
|
sb.Append(relationship.ThisPropertyName);
|
|
sb.Append(")");
|
|
}
|
|
|
|
if (relationship.OtherCardinality == Cardinality.Many)
|
|
{
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".WithMany(t => t.");
|
|
sb.Append(relationship.OtherPropertyName);
|
|
sb.Append(")");
|
|
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".HasForeignKey(d => ");
|
|
sb.Append(KeyExpression(relationship.ThisProperties, "d"));
|
|
sb.Append(")");
|
|
}
|
|
else
|
|
{
|
|
sb.AppendLine();
|
|
sb.Append(' ', 4 * 4);
|
|
sb.Append(".WithOptional(t => t.");
|
|
sb.Append(relationship.OtherPropertyName);
|
|
sb.Append(")");
|
|
}
|
|
|
|
sb.AppendLine(";");
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
public string KeyExpression(IEnumerable<Property> keys, string alias = "t")
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
if (keys.Count() == 1)
|
|
{
|
|
sb.Append(alias);
|
|
sb.Append(".");
|
|
sb.Append("Id");
|
|
}
|
|
else
|
|
{
|
|
sb.Append("new { ");
|
|
foreach(var p in keys)
|
|
{
|
|
if (sb.Length > 6)
|
|
sb.Append(", ");
|
|
|
|
sb.Append(alias);
|
|
sb.Append(".");
|
|
if( p.IsForeignKey.SafeValue() == false )
|
|
sb.Append("Id");
|
|
else
|
|
sb.Append(p.PropertyName);
|
|
}
|
|
sb.Append(" }");
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
public string KeyExpression(IEnumerable<string> keys, string alias = "t")
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
if (keys.Count() == 1)
|
|
{
|
|
sb.Append(alias);
|
|
sb.Append(".");
|
|
sb.Append(keys.FirstOrDefault());
|
|
}
|
|
else
|
|
{
|
|
sb.Append("new { ");
|
|
foreach(var p in keys)
|
|
{
|
|
if (sb.Length > 6)
|
|
sb.Append(", ");
|
|
|
|
sb.Append(alias);
|
|
sb.Append(".");
|
|
sb.Append(p);
|
|
}
|
|
sb.Append(" }");
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
</script> |