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

时间:2013-05-07 21:19:00

标签: c# sql-server asp.net-mvc entity-framework

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

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 });
}

适用于我最终使用的大多数表格。我现在的任务是创建一些新功能,这需要我从新表中提取数据。这些表没有主键,我没有权限更改它。这篇关于mapping with fluent api州的MSDN文章

  

按照惯例,没有指定主键的类型被视为复杂类型。在某些情况下,Code First不会检测复杂类型(例如,如果您确实有一个名为ID的属性,但您并不意味着它是主键)。在这种情况下,您可以使用Fluent API明确指定类型是复杂类型。

modelBuilder.ComplexType<Details>();

使用上述方法不允许我使用ToTable()将此类型映射到数据库表。如何使用流畅的API执行此操作。我还想强调一点,我不打算在数据库密钥中提供表格,即使它们真的应该这样做。

1 个答案:

答案 0 :(得分:0)

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

如何从Linq查询中提取表中的数据。如果您愿意,可以将其封装在只读字段中(正如您所说,您需要从新表中提取数据):

private string _YourData;

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