- 补充 Navigate(ManyToMany = typeof(中间表)) 多对多自定义配置;

This commit is contained in:
28810
2019-07-15 18:10:59 +08:00
parent 179b7d9851
commit b62afec7bb
18 changed files with 841 additions and 164 deletions

View File

@ -0,0 +1,252 @@
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Threading;
using Xunit;
namespace FreeSql.Tests.DataAnnotations
{
public class ManyToManyTest
{
Random rnd = new Random();
#region Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>
[Fact]
public void Select()
{
var users = new mtm_user[10];
var roles = new mtm_role[10];
var urs = new List<mtm_user_mtm_role>();
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mtm_user
{
id = uid,
username = "<22>û<EFBFBD>" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
for (var a = 0; a < roles.Length; a++)
{
var uid = Guid.NewGuid();
roles[a] = new mtm_role
{
id = uid,
name = "<22><>ɫ" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(roles).ExecuteAffrows();
for (var a = 0; a < users.Length; a++)
{
for (var b = roles.Length; b >= 0; b--)
{
var ur = new mtm_user_mtm_role
{
mtm_user_id = users[a].id,
mtm_role_id = roles[rnd.Next(roles.Length)].id
};
if (urs.Where(c => c.mtm_role_id == ur.mtm_role_id && c.mtm_user_id == ur.mtm_user_id).Any() == false)
urs.Add(ur);
}
}
g.sqlite.Insert(urs.ToArray()).ExecuteAffrows();
var select1 = g.sqlite.Select<mtm_user>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mtm_user>().IncludeMany(a => a.mtm_roles).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class mtm_user
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
public virtual List<mtm_role> mtm_roles { get; set; }
}
public class mtm_user_mtm_role
{
public Guid mtm_user_id { get; set; }
public Guid mtm_role_id { get; set; }
public mtm_user mtm_user { get; set; }
public mtm_role mtm_role { get; set; }
}
public class mtm_role
{
public Guid id { get; set; }
public string name { get; set; }
public DateTime createtime { get; set; }
public virtual List<mtm_user> mtm_users { get; set; }
}
#endregion
#region <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>ΪԼ<EFBFBD><EFBFBD>
[Fact]
public void Navigate1()
{
var users = new mtm_user_nav1[10];
var roles = new mtm_role_nav1[10];
var urs = new List<user_role_nav1>();
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mtm_user_nav1
{
id = uid,
username = "<22>û<EFBFBD>" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
for (var a = 0; a < roles.Length; a++)
{
var uid = Guid.NewGuid();
roles[a] = new mtm_role_nav1
{
id = uid,
name = "<22><>ɫ" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(roles).ExecuteAffrows();
for (var a = 0; a < users.Length; a++)
{
for (var b = roles.Length; b >= 0; b--)
{
var ur = new user_role_nav1
{
user_id = users[a].id,
role_id = roles[rnd.Next(roles.Length)].id
};
if (urs.Where(c => c.role_id == ur.role_id && c.user_id == ur.user_id).Any() == false)
urs.Add(ur);
}
}
g.sqlite.Insert(urs.ToArray()).ExecuteAffrows();
var select1 = g.sqlite.Select<mtm_user_nav1>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mtm_user_nav1>().IncludeMany(a => a.roles).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class mtm_user_nav1
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
[Navigate(ManyToMany = typeof(user_role_nav1))]
public virtual List<mtm_role_nav1> roles { get; set; }
}
public class user_role_nav1
{
public Guid user_id { get; set; }
public Guid role_id { get; set; }
public mtm_user_nav1 user { get; set; }
public mtm_role_nav1 role { get; set; }
}
public class mtm_role_nav1
{
public Guid id { get; set; }
public string name { get; set; }
public DateTime createtime { get; set; }
[Navigate(ManyToMany = typeof(user_role_nav1))]
public virtual List<mtm_user_nav1> users { get; set; }
}
#endregion
#region <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>
[Fact]
public void Navigate()
{
var users = new mtm_user_nav[10];
var roles = new mtm_role_nav[10];
var urs = new List<user_role_nav>();
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mtm_user_nav
{
id = uid,
username = "<22>û<EFBFBD>" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
for (var a = 0; a < roles.Length; a++)
{
var uid = Guid.NewGuid();
roles[a] = new mtm_role_nav
{
id = uid,
name = "<22><>ɫ" + a + "_" + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(roles).ExecuteAffrows();
for (var a = 0; a < users.Length; a++)
{
for (var b = roles.Length; b >= 0; b--)
{
var ur = new user_role_nav
{
user_pkid = users[a].id,
role_pkid = roles[rnd.Next(roles.Length)].id
};
if (urs.Where(c => c.role_pkid == ur.role_pkid && c.user_pkid == ur.user_pkid).Any() == false)
urs.Add(ur);
}
}
g.sqlite.Insert(urs.ToArray()).ExecuteAffrows();
var select1 = g.sqlite.Select<mtm_user_nav>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mtm_user_nav>().IncludeMany(a => a.roles).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class mtm_user_nav
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
[Navigate(ManyToMany = typeof(user_role_nav))]
public virtual List<mtm_role_nav> roles { get; set; }
}
public class user_role_nav
{
public Guid user_pkid { get; set; }
public Guid role_pkid { get; set; }
[Navigate("user_pkid")]
public mtm_user_nav user { get; set; }
[Navigate("role_pkid")]
public mtm_role_nav role { get; set; }
}
public class mtm_role_nav
{
public Guid id { get; set; }
public string name { get; set; }
public DateTime createtime { get; set; }
[Navigate(ManyToMany = typeof(user_role_nav))]
public virtual List<mtm_user_nav> users { get; set; }
}
#endregion
}
}

View File

@ -0,0 +1,141 @@
using FreeSql.DataAnnotations;
using System;
using System.Numerics;
using Xunit;
namespace FreeSql.Tests.DataAnnotations
{
public class ManyToOneTest
{
#region Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
[Fact]
public void Select()
{
var users = new mto_user[10];
var topics = new mto_topic[30];
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mto_user
{
id = uid,
username = Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3] = new mto_topic
{
id = Guid.NewGuid(),
userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 1] = new mto_topic
{
id = Guid.NewGuid(),
userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 1) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 2] = new mto_topic
{
id = Guid.NewGuid(),
userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 2) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
g.sqlite.Insert(topics).ExecuteAffrows();
var select1 = g.sqlite.Select<mto_topic>().Limit(30).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mto_topic>().Include(a => a.user).Limit(30).OrderByDescending(a => a.createtime).ToList(true);
var firstct = users[0].createtime.AddSeconds(-1);
var select3 = g.sqlite.Select<mto_topic>().Where(a => a.user.createtime > firstct).Limit(30).OrderByDescending(a => a.createtime).ToList(true);
}
public class mto_user
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
}
public class mto_topic
{
public Guid id { get; set; }
public Guid userid { get; set; }
public virtual mto_user user { get; set; }
public string title { get; set; }
public DateTime createtime { get; set; }
}
#endregion
#region <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
[Fact]
public void Navigate()
{
var users = new mto_user_nav[10];
var topics = new mto_topic_nav[30];
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mto_user_nav
{
id = uid,
username = Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3] = new mto_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 1] = new mto_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 1) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 2] = new mto_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 2) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
g.sqlite.Insert(topics).ExecuteAffrows();
var select1 = g.sqlite.Select<mto_topic_nav>().Limit(30).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mto_topic_nav>().Include(a => a.user).Limit(30).OrderByDescending(a => a.createtime).ToList(true);
var firstct = users[0].createtime.AddSeconds(-1);
var select3 = g.sqlite.Select<mto_topic_nav>().Where(a => a.user.createtime > firstct).Limit(30).OrderByDescending(a => a.createtime).ToList(true);
}
public class mto_user_nav
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
}
public class mto_topic_nav
{
public Guid id { get; set; }
public Guid user_nav_pkid { get; set; }
[Navigate("user_nav_pkid")]
public virtual mto_user_nav user { get; set; }
public string title { get; set; }
public DateTime createtime { get; set; }
}
#endregion
}
}

View File

@ -0,0 +1,138 @@
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Numerics;
using Xunit;
namespace FreeSql.Tests.DataAnnotations
{
public class OneToManyTest
{
#region Լ<EFBFBD><EFBFBD>һ<EFBFBD>Զ<EFBFBD>
[Fact]
public void Select()
{
var users = new mto_user[10];
var topics = new mto_topic[30];
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new mto_user
{
id = uid,
username = Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3] = new mto_topic
{
id = Guid.NewGuid(),
mto_userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 1] = new mto_topic
{
id = Guid.NewGuid(),
mto_userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 1) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 2] = new mto_topic
{
id = Guid.NewGuid(),
mto_userid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 2) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
g.sqlite.Insert(topics).ExecuteAffrows();
var select1 = g.sqlite.Select<mto_user>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<mto_user>().IncludeMany(a => a.mto_topics).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class mto_user
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
public virtual List<mto_topic> mto_topics { get; set; }
}
public class mto_topic
{
public Guid id { get; set; }
public Guid mto_userid { get; set; }
public string title { get; set; }
public DateTime createtime { get; set; }
}
#endregion
#region <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Զ<EFBFBD>
[Fact]
public void Navigate()
{
var users = new otm_user_nav[10];
var topics = new otm_topic_nav[30];
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new otm_user_nav
{
id = uid,
username = Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3] = new otm_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 1] = new otm_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 1) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
topics[a * 3 + 2] = new otm_topic_nav
{
id = Guid.NewGuid(),
user_nav_pkid = uid,
title = "<22><><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>" + (a * 3 + 2) + Guid.NewGuid().ToString("N"),
createtime = DateTime.Now
};
}
g.sqlite.Insert(users).ExecuteAffrows();
g.sqlite.Insert(topics).ExecuteAffrows();
var select1 = g.sqlite.Select<otm_user_nav>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<otm_user_nav>().IncludeMany(a => a.topics).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class otm_user_nav
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
[Navigate("user_nav_pkid")]
public virtual List<otm_topic_nav> topics { get; set; }
}
public class otm_topic_nav
{
public Guid id { get; set; }
public Guid user_nav_pkid { get; set; }
public string title { get; set; }
public DateTime createtime { get; set; }
}
#endregion
}
}

View File

@ -0,0 +1,60 @@
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Xunit;
namespace FreeSql.Tests.DataAnnotations
{
public class OneToOneTest
{
[Fact]
public void Select()
{
var users = new oto_user[10];
for (var a = 0; a < users.Length; a++)
{
var uid = Guid.NewGuid();
users[a] = new oto_user
{
id = uid,
username = Guid.NewGuid().ToString("N"),
createtime = DateTime.Now,
ext = new oto_user_field
{
userid = uid,
age = a,
createtime = DateTime.Now
}
};
}
g.sqlite.Insert(users).ExecuteAffrows();
g.sqlite.Insert(users.Select(a => a.ext).ToArray()).ExecuteAffrows();
var select1 = g.sqlite.Select<oto_user>().Include(a => a.ext).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select2 = g.sqlite.Select<oto_user_field>().Limit(10).OrderByDescending(a => a.createtime).ToList(true);
var select3 = g.sqlite.Select<oto_user_field>().Include(a => a.user).Limit(10).OrderByDescending(a => a.createtime).ToList(true);
}
public class oto_user
{
public Guid id { get; set; }
public string username { get; set; }
public DateTime createtime { get; set; }
public oto_user_field ext { get; set; }
}
public class oto_user_field
{
[Column(IsPrimary = true)]
public Guid userid { get; set; }
public virtual oto_user user { get; set; }
public int age { get; set; }
public DateTime createtime { get; set; }
}
}
}