mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-10-31 07:49:26 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq.Expressions;
 | |
| using FreeSql.DataAnnotations;
 | |
| 
 | |
| namespace FreeSql.Extensions.EfCoreFluentApi
 | |
| {
 | |
|     public static class ICodeFirstExtensions
 | |
|     {
 | |
| 
 | |
|         public static ICodeFirst Entity<T>(this ICodeFirst codeFirst, Action<EfCoreTableFluent<T>> modelBuilder)
 | |
|         {
 | |
|             codeFirst.ConfigEntity<T>(tf => modelBuilder(new EfCoreTableFluent<T>(tf)));
 | |
|             return codeFirst;
 | |
|         }
 | |
| 
 | |
|         static void Test()
 | |
|         {
 | |
|             ICodeFirst cf = null;
 | |
|             cf.Entity<Song>(eb =>
 | |
|             {
 | |
|                 eb.ToTable("tb_song");
 | |
|                 eb.Ignore(a => a.Field1);
 | |
|                 eb.Property(a => a.Title).HasColumnType("varchar(50)").IsRequired();
 | |
|                 eb.Property(a => a.Url).HasMaxLength(100);
 | |
| 
 | |
|                 eb.Property(a => a.RowVersion).IsRowVersion();
 | |
|                 eb.Property(a => a.CreateTime).HasDefaultValueSql("getdate()");
 | |
| 
 | |
|                 eb.HasKey(a => a.Id);
 | |
|                 eb.HasIndex(a => a.Title).IsUnique().HasName("idx_xxx11");
 | |
| 
 | |
|                 //一对多、多对一
 | |
|                 eb.HasOne(a => a.Type).HasForeignKey(a => a.TypeId).WithMany(a => a.Songs);
 | |
| 
 | |
|                 //多对多
 | |
|                 eb.HasMany(a => a.Tags).WithMany(a => a.Songs, typeof(Song_tag));
 | |
|             });
 | |
|         }
 | |
| 
 | |
|         public class SongType
 | |
|         {
 | |
|             public int Id { get; set; }
 | |
|             public string Name { get; set; }
 | |
| 
 | |
|             public List<Song> Songs { get; set; }
 | |
|         }
 | |
| 
 | |
|         public class Song
 | |
|         {
 | |
|             public int Id { get; set; }
 | |
|             public string Title { get; set; }
 | |
|             public string Url { get; set; }
 | |
|             public DateTime CreateTime { get; set; }
 | |
| 
 | |
|             public int TypeId { get; set; }
 | |
|             public SongType Type { get; set; }
 | |
|             public List<Tag> Tags { get; set; }
 | |
| 
 | |
|             public int Field1 { get; set; }
 | |
|             public long RowVersion { get; set; }
 | |
|         }
 | |
|         public class Song_tag
 | |
|         {
 | |
|             public int Song_id { get; set; }
 | |
|             public Song Song { get; set; }
 | |
| 
 | |
|             public int Tag_id { get; set; }
 | |
|             public Tag Tag { get; set; }
 | |
|         }
 | |
| 
 | |
|         public class Tag
 | |
|         {
 | |
|             [Column(IsIdentity = true)]
 | |
|             public int Id { get; set; }
 | |
| 
 | |
|             public string Name { get; set; }
 | |
| 
 | |
|             public List<Song> Songs { get; set; }
 | |
|         }
 | |
|     }
 | |
| }
 | 
