使用fluent API映射没有主键的数据库表

本文关键字:数据库 fluent API 映射 使用 | 更新日期: 2023-09-27 18:12:47

我正在开发一个应用程序,它有许多已经存在的表映射,如

public DbSet<Activity> Activities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Activity>().ToTable("Activity", "MES_WVM");
    modelBuilder.Entity<Activity>().HasKey(r => new { r.ActivityID });
}

适用于我最终使用的大多数表。我现在的任务是创建一些新功能,这需要我从新表中提取数据。这些表没有主键,我也没有权限去修改它。这篇关于使用流畅api状态进行映射的MSDN文章

按照约定,没有指定主键的类型被视为复杂类型。在某些情况下,Code First不会检测复杂类型(例如,如果您确实有一个名为ID的属性,但您并不打算将其作为主键)。在这种情况下,您可以使用fluent API显式地指定类型为复杂类型。

modelBuilder.ComplexType<Details>();

使用上面的方法不允许我使用ToTable()将此类型映射到数据库表。我如何使用流畅的API做到这一点。我还想强调,我不打算给DB中的表键,即使它们真的应该给。

使用fluent API映射没有主键的数据库表

如果现有的表没有Key,并且您不打算更改它,那么您可能不应该尝试使用Fluent API添加Key。如果实体与原始POCO对象的约定不同,那么Fluent API将帮助您定义实体之间的映射,但是它们创建的映射应该存在于数据存储库中。

你直接从Linq查询的表中提取数据怎么样?如果你喜欢,你可以将它封装在只读字段中(就像你说你需要从新表中提取数据一样):

private string _YourData;
public string YourData 
{ 
   get { return _YourData ?? (_YourData = ExistingTable.Single(yourquery)); }
}