CSharp:donet 7 Many to Many Relationship with EF Core 7.02
sql:
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].GeovinDuMap') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE GeovinDuMap
GO
CREATE TABLE GeovinDuMap
(
Id int IDENTITY(1,1) primary key NOT NULL,
ManAreaName nvarchar(50)
)
go
select * from GeovinDuMap
go
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].GeovinDuYear') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE GeovinDuYear
GO
CREATE TABLE GeovinDuYear
(
Id int IDENTITY(1,1) primary key NOT NULL,
YearAutoName nvarchar(50)
)
go
select * from GeovinDuYear
go
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].GeovinDuList') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE GeovinDuList
GO
CREATE TABLE GeovinDuList
(
Id int IDENTITY(1,1) primary key NOT NULL,
TookKitId int
Foreign Key REFERENCES GeovinDuMap(Id),
YearId int
Foreign Key REFERENCES GeovinDuYear(Id),
SingName nvarchar(50)
)
go
select * from GeovinDuList
go
[Table("GeovinDuMap")]
public class GeovinDuMap
{
public GeovinDuMap()
{ }
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <param name="manAreaName"></param>
public GeovinDuMap(int id, string manAreaName)
{
Id = id;
ManAreaName = manAreaName;
}
[Key]
public int Id { get; set; }
[StringLength(50)]
public string ManAreaName { get; set; }
public virtual ICollection<GeovinDuList> GeovinDuList { get; set; }
}
//Cross Table
[Table("GeovinDuList")]
public class GeovinDuList
{
[Key]
public int Id { get; set; }
public int TookKitId { get; set; }
public int YearId { get; set; }
/// <summary>
///
/// </summary>
[StringLength(50)]
public string SingName { get; set; } = "";
[ForeignKey("TookKitId")]
public virtual GeovinDuMap GeovinDuMap { get; set; }
[ForeignKey("YearId")]
public virtual GeovinDuYear GeovinDuYear { get; set; }
}
[Table("GeovinDuYear")]
public class GeovinDuYear
{
[Key]
public int Id { get; set; }
[StringLength(50)]
public string YearAutoName { get; set; }
public virtual ICollection<GeovinDuList> GeovinDuList { get; set; }
}
#endregion
public class DuDbContext : DbContext
{
public DbSet<GeovinDuMap> GeovinDuMap { get; set; }
public DbSet<GeovinDuYear> GeovinDuYear { get; set; }
public DbSet<GeovinDuList> GeovinDuList { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=geovindu\\GEOVIN2008;Database=EntityFrameworkgeovindu;User ID=sa;Password=geovindu");
//.ReplaceService<IModelCacheKeyFactory, DynamicModelCacheKeyFactory>();
}
/// <summary>
///
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//modelBuilder.Entity<GeovinDuMap>(
// dob =>
// {
// dob.ToTable("GeovinDuMap");
// dob.Property(o => o.Id).HasColumnName("Id");
// dob.Property(o => o.ManAreaName).HasColumnName("ManAreaName");
// });
//modelBuilder.Entity<GeovinDuList>(
// dob =>
// {
// dob.ToTable("GeovinDuList");
// dob.Property(o => o.Id).HasColumnName("Id");
// dob.Property(o => o.TookKitId).HasColumnName("TookKitId");
// dob.Property(o => o.SingName).HasColumnName("SingName");
// });
//modelBuilder.Entity<GeovinDuYear>(
// dob =>
// {
// dob.ToTable("GeovinDuYear");
// dob.Property(o => o.Id).HasColumnName("Id");
// dob.Property(o => o.YearAutoName).HasColumnName("YearAutoName");
// });
//modelBuilder.Entity<GeovinDuList>()
// .HasKey(ky => new { ky.TookKitId, ky.YearId });
modelBuilder.Entity<GeovinDuList>()
.HasKey("Id");
modelBuilder.Entity<GeovinDuList>()
.HasOne(ky => ky.GeovinDuMap) //
.WithMany(k => k.GeovinDuList) //多对多
.HasForeignKey(ky => ky.TookKitId);
modelBuilder.Entity<GeovinDuList>()
.HasOne(ky => ky.GeovinDuYear) //
.WithMany(y => y.GeovinDuList) //多对多
.HasForeignKey(ky => ky.YearId);
base.OnModelCreating(modelBuilder);
}
调用:
//Console.Read();
//初始化表格至数据库
//DuDbContext context = new();
//await context.Database.MigrateAsync();
DuDbContext duDbContext = new DuDbContext();
//GeovinDuMap map= new GeovinDuMap();
//map.ManAreaName = "涂聚文";
//duDbContext.GeovinDuMap.Add(map);
//int k=duDbContext.SaveChanges();
//if(k>0)
//{
// Console.WriteLine("ok");
//}
//else
//{
// Console.WriteLine("no");
//}
var dulist = duDbContext.GeovinDuMap.ToList();//duDbContext.GeovinDuMap.Select(d => d.Id).ToList();
foreach (var d in dulist)
{
Console.WriteLine(d.ManAreaName);
}
//GeovinDuYear year= new GeovinDuYear();
//year.YearAutoName = "y2010";
//duDbContext.GeovinDuYear.Add(year);
//duDbContext.SaveChanges();
var duyear=duDbContext.GeovinDuYear.ToList();
foreach(var d in duyear)
{
Console.WriteLine(d.YearAutoName);
}
GeovinDuList geovinDuList=new GeovinDuList();
//geovinDuList.Id= 1;
geovinDuList.TookKitId = 2;
geovinDuList.YearId = 3;
geovinDuList.SingName = "涂聚文";
duDbContext.GeovinDuList.Add(geovinDuList);
int dok=duDbContext.SaveChanges();
if (dok > 0)
{
Console.WriteLine("ok,GeovinDuList");
}
else
{
Console.WriteLine("no,GeovinDuList");
}
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号