我们有一个使用 Entity Framework 6 的 .NET Framework 4.8 应用程序。
现在我们遇到一个问题,需要添加一些不保证唯一性的表(没有主键,行不能重复)。我们无法修改这些表,因为这可能会破坏系统(这个表每天凌晨 4 点都会被一个我们无法控制的程序重新填充)。
与这个问题中描述的问题几乎完全相同,但答案只是说不要使用实体框架 6。我能想到的另一种选择是有一个视图或另一个程序将该表的数据导入到新表中。
实体框架方面真的没有 Fluent API 或注解的解决方法吗?难道真的需要引入一种全新的方法来访问数据库,或者仅仅因为 EF6 中实体必须有主键就引入一个新的视图吗?
表关系的示例(实际的表,但我删除了大多数不相关的列):
class Customer
{
[Key]
public int CustomerID { get; set; }
public string FirstName { get; set; }
public virtual ICollection<CustomerOutboundEvent> CustomerOutboundEvents { get; set; }
}
// The new table
class CustomerOutboundEvent
{
// Adding key that doesn't actually exist will cause this error: Invalid column name 'CustomerOutboundEventID'.
//[Key]
//public int CustomerOutboundEventID { get; set; }
public int CustomerID { get; set; }
public Customer Customer { get; set; }
public string OutboundNumber { get; set; }
public string EventMessage { get; set; }
}
如果您在查询表时从未使用过更改跟踪,那么您可以谎报哪些列是表中的关键列。
要禁用更改跟踪,请参阅: https: //learn.microsoft.com/en-us/ef/ef6/querying/no-tracking
由于您有重复项,即使在 EF 中将每一列添加为键列也无法使更改跟踪工作,因为 EF 拒绝将重复项加载到更改跟踪器中。
EF Core 具有无键类型