是否可以將基于 EF 6(使用 .NetFramework 4.0)和 EF Core 5.0(.Net Standard 2.1)的兩個應用程式的不同版本的物體框架(核心)物體與相同的資料庫連接到一個物體介面中,而不是使用實際的介面兩個物體框架都提供的資料庫類,使用包含實際資料庫物體介面的專案并針對 EF 6 和 EF Core 5 支持的框架平臺?
<!--EntityTypes.csproj-->
...
<TargetFrameworks>netstandard2.1; net40; net45</TargetFrameworks>
....
// IEntity.cs
namespace EntityTypes
{
public interface IEntity
{
long EntityID { get; set; }
string EntityName { get; set; }
}
}
在 .Net Core 和 Framework 4.0 專案中,我需要以某種方式使用類似的語法
var _entitiesContext = new EntitiesContext();
public static List<IEntity> BuildSet<T>() where T : class
{
return _entitiesContext.Entities.ToList().Cast<IEntity>().ToList();
}
正如我在這個問題中已經發現的:How to Cast DBSet to Interface in Anonymous Method - EF 但沒有進入運行時錯誤
System.InvalidCastException: 'Unable to cast object of type
'System.Data.Entity.DynamicProxies.Entity_33C84C30E063218CBB4881E395838375014F3EFBA09108F25ACF2FB2FCA1E92D'
to type 'EntityTypes.IEntity'.'
uj5u.com熱心網友回復:
包含實際資料庫物體的介面并針對 EF 6 和 EF Core 5 支持的框架平臺的專案?
基本上,這很簡單。您不需要任何物體介面。只需在您從兩個 EF 專案中參考的單獨程式集中定義您的物體,并創建一個抽象類或介面來定義您可以使用 EF Core 或 EF6 DbContext 實作的存盤庫,例如:
public class SomeEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class AnotherEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class Repository : IDisposable
{
public abstract IQueryable<SomeEntity> SomeEntities { get; }
public abstract IQueryable<AnotherEntity> AnotherEntities { get; }
public abstract void SaveChanges();
public abstract void Dispose();
}
您必須添加方法來獲取成形資料,因為預先加載Include是特定于版本的擴展,或者提供將運算式傳遞到抽象存盤庫并Include在特定于版本的子類中創建的方法。但是使用 IQueryable 的基本查詢可以正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/317463.html
