gpt4 book ai didi

c# - EF6 Code First 和通过注释映射,如何构建配置?

转载 作者:行者123 更新时间:2023-11-30 16:55:35 25 4
gpt4 key购买 nike

我像这样使用 EF6 的流畅映射:

public SomeClass
{
public int SomeID { get; set; }
}

public SomeClassMap : EntityTypeConfiguration<SomeClass>
{
public SomeClassMap()
{
ToTable("SomeTable");
HasKey(c => c.SomeID);
}
}

并从第一个请求类型(模型)的程序集构建配置:

public class MyContext : DbContext
{
private Assembly _assembly;

public MyContext(string connectionName, Type type)
{
//checks
Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;

_assembly = Assembly.GetAssembly(type);
}

public override void OnModelCreating(DbModelBuilder modelBuilder)
{
//conventions

//Not the ideal solution, still looking for something better
modelBuilder.Configurations.AddFromAssembly(_assembly);
}
}

现在我想制作一个独立于模型的通用数据项目,所以我想通过注释进行映射,并在我的数据项目中简单地调用通用方法。

我已经映射了类:

[Table("SomeTable")]
public SomeClass
{
[Key]
public int SomeID { get; set; }
}

现在我如何将它传递给数据项目,以便它可以构建模型配置?

编辑 这可能是相关的,因为我的数据项目是通用的,我没有 DbSet<Entity>其中的变量,而不是我调用 context.Set<Entity>并使用那里的功能。

最佳答案

您可以通过 constructor that takes a DbCompiledModel 创建一个 DbContext .

您可以单独构建编译模型。这取决于您要在何处履行该职责,但模型类应在范围内。

这是一个例子:

一些类:

[Table("Company")]
class Company
{
[Key]
public int CompanyID { get; set; }
public string Name { get; set; }

public virtual ICollection<Location> Locations { get; set; }
}

[Table("Location")]
class Location
{
[Key]
public int LocationID { get; set; }
public string Name { get; set; }

[ForeignKey("Company")]
public int CompanyID { get; set; }
public virtual Company Company { get; set; }
}

DbContext 的创建和使用:

// Create a model + register types to it.
var mb = new DbModelBuilder();
mb.Entity<Company>();
mb.Entity<Location>();

// Or:
//mb.RegisterEntityType(typeof(Company));
//mb.RegisterEntityType(typeof(Location));

// Build and compile the model
var connString = @"server=myServer;database=theDataBase;Integrated Security=SSPI;MultipleActiveResultSets=True";

var dbModel = mb.Build(new SqlConnection(connString));

var compiledModel = dbModel.Compile();

// Create a DbContext using the compiled model.
var db = new DbContext(connString, compiledModel);
Database.SetInitializer<DbContext>(null); // Prevent creation of migration table

// Ready to go!
var companies = db.Set<Company>().Include(c => c.Locations).ToList();

您可以通过存储和重用缓存的 DbCompiledModel 来提高效率。

关于c# - EF6 Code First 和通过注释映射,如何构建配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com