我觉得这很容易……我有一个情况,我有一个表模块,可以包含“基础”模块,和“ 复合 </跨度> “模块(由1-n个基本模块组成)。
所以我有基础模块:
INSERT INTO dbo.Module(ModuleName)VALUES(‘基本模块#1’),(‘基本模块#2’),(‘基本模块#3’)
现在我创建了一个EF 6“代码优先,从数据库反向工程” 模型 </跨度> 得到了
试试我的发电机 EntityFramework反向POCO生成器 看看这对你来说是否更好。
它生成了以下代码(底部有趣的东西):
public interface IMyDbContext : System.IDisposable { System.Data.Entity.DbSet<Module> Modules { get; set; } // Module int SaveChanges(); System.Threading.Tasks.Task<int> SaveChangesAsync(); System.Threading.Tasks.Task<int> SaveChangesAsync(System.Threading.CancellationToken cancellationToken); } public class MyDbContext : System.Data.Entity.DbContext, IMyDbContext { public System.Data.Entity.DbSet<Module> Modules { get; set; } // Module static MyDbContext() { System.Data.Entity.Database.SetInitializer<MyDbContext>(null); } public MyDbContext() : base("Name=MyDbContext") { } public MyDbContext(string connectionString) : base(connectionString) { } public MyDbContext(string connectionString, System.Data.Entity.Infrastructure.DbCompiledModel model) : base(connectionString, model) { } public MyDbContext(System.Data.Common.DbConnection existingConnection, bool contextOwnsConnection) : base(existingConnection, contextOwnsConnection) { } public MyDbContext(System.Data.Common.DbConnection existingConnection, System.Data.Entity.Infrastructure.DbCompiledModel model, bool contextOwnsConnection) : base(existingConnection, model, contextOwnsConnection) { } protected override void Dispose(bool disposing) { base.Dispose(disposing); } protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Configurations.Add(new ModuleConfiguration()); } public static System.Data.Entity.DbModelBuilder CreateModel(System.Data.Entity.DbModelBuilder modelBuilder, string schema) { modelBuilder.Configurations.Add(new ModuleConfiguration(schema)); return modelBuilder; } } public class Module { public int ModuleId { get; set; } // ModuleId (Primary key) public string ModuleName { get; set; } // ModuleName (length: 100) // Reverse navigation public virtual System.Collections.Generic.ICollection<Module> BaseModule { get; set; } // Many to many mapping public virtual System.Collections.Generic.ICollection<Module> CompoundModule { get; set; } // Many to many mapping public Module() { BaseModule = new System.Collections.Generic.List<Module>(); CompoundModule = new System.Collections.Generic.List<Module>(); } } // Module public class ModuleConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Module> { public ModuleConfiguration() : this("dbo") { } public ModuleConfiguration(string schema) { ToTable("Module", schema); HasKey(x => x.ModuleId); Property(x => x.ModuleId).HasColumnName(@"ModuleId").IsRequired().HasColumnType("int").HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); Property(x => x.ModuleName).HasColumnName(@"ModuleName").IsOptional().IsUnicode(false).HasColumnType("varchar").HasMaxLength(100); HasMany(t => t.CompoundModule).WithMany(t => t.BaseModule).Map(m => { m.ToTable("CompoundModule", "dbo"); m.MapLeftKey("BaseModuleId"); m.MapRightKey("CompoundModuleId"); }); } }