mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-20 04:48:16 +08:00
- 增加 NavigateAttribute 特性对应的 Fluent 功能;#96
This commit is contained in:
@ -164,6 +164,27 @@ namespace FreeSql.Internal
|
||||
if (ret != null && ret.MapType == null) ret.MapType = proto.PropertyType;
|
||||
return ret;
|
||||
}
|
||||
public NavigateAttribute GetEntityNavigateAttribute(Type type, PropertyInfo proto)
|
||||
{
|
||||
var attr = new NavigateAttribute();
|
||||
if (dicConfigEntity.TryGetValue(type, out var trytb) && trytb._navigates.TryGetValue(proto.Name, out var trynav))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(trynav.Bind)) attr.Bind = trynav.Bind;
|
||||
if (trynav.ManyToMany != null) attr.ManyToMany = trynav.ManyToMany;
|
||||
}
|
||||
var attrs = proto.GetCustomAttributes(typeof(NavigateAttribute), false);
|
||||
foreach (var tryattrobj in attrs)
|
||||
{
|
||||
trynav = tryattrobj as NavigateAttribute;
|
||||
if (trynav == null) continue;
|
||||
if (!string.IsNullOrEmpty(trynav.Bind)) attr.Bind = trynav.Bind;
|
||||
if (trynav.ManyToMany != null) attr.ManyToMany = trynav.ManyToMany;
|
||||
}
|
||||
NavigateAttribute ret = null;
|
||||
if (!string.IsNullOrEmpty(attr.Bind)) ret = attr;
|
||||
if (attr.ManyToMany != null) ret = attr;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public string WhereObject(TableInfo table, string aliasAndDot, object dywhere)
|
||||
{
|
||||
|
@ -311,7 +311,7 @@ namespace FreeSql.Internal
|
||||
$"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name.Remove(pnv.PropertyType.Name.IndexOf('`'))}<{string.Join(", ", pnv.PropertyType.GenericTypeArguments.Select(a => a.IsNested ? $"{a.DeclaringType.Namespace?.NotNullAndConcat(".")}{a.DeclaringType.Name}.{a.Name}" : $"{a.Namespace?.NotNullAndConcat(".")}{a.Name}"))}>" :
|
||||
(pnv.PropertyType.IsNested ? $"{pnv.PropertyType.DeclaringType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.DeclaringType.Name}.{pnv.PropertyType.Name}" : $"{pnv.PropertyType.Namespace?.NotNullAndConcat(".")}{pnv.PropertyType.Name}");
|
||||
|
||||
var pnvAttr = pnv.GetCustomAttribute<NavigateAttribute>();
|
||||
var pnvAttr = common.GetEntityNavigateAttribute(trytb.Type, pnv);
|
||||
var pnvBind = pnvAttr?.Bind?.Split(',').Select(a => a.Trim()).Where(a => !string.IsNullOrEmpty(a)).ToArray();
|
||||
var nvref = new TableRef();
|
||||
nvref.Property = pnv;
|
||||
@ -351,7 +351,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
isManyToMany = propElementType != trytb.Type &&
|
||||
tbref.Properties.Where(z => (z.Value.PropertyType.GenericTypeArguments.FirstOrDefault() == trytb.Type || z.Value.PropertyType.GetElementType() == trytb.Type) &&
|
||||
z.Value.GetCustomAttribute<NavigateAttribute>()?.ManyToMany == pnvAttr.ManyToMany &&
|
||||
common.GetEntityNavigateAttribute(tbref.Type, z.Value)?.ManyToMany == pnvAttr.ManyToMany &&
|
||||
typeof(IEnumerable).IsAssignableFrom(z.Value.PropertyType)).Any();
|
||||
|
||||
if (isManyToMany == false)
|
||||
|
Reference in New Issue
Block a user