[英]Auto-generated class from EF6 to implement custom interface
我正在使用EF6。我在db中有一個表,為其自動生成的類如下所示:
public partial class tblPreparation
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public tblPreparation()
{
this.tblPreparationItem = new HashSet<tblPreparationItem>();
}
public int id { get; set; }
public string name { get; set; }
public System.DateTime date { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblPreparationItem> tblPreparationItem { get; set; }
}
在我的代碼中,我希望此類擴展另一個類EntityObject,該類位於名稱空間System.Data.Entity.Core.Objects.DataClasses中(並實現另一個接口)。 所以我創建了寫這個局部類:
public partial class tblPreparation : EntityObject, IMyInterface
{
}
它不會引發語法錯誤,但在運行應用程序時會出現運行時錯誤:“未映射類型'tblPreparation'。請使用Ignore方法或NotMappedAttribute數據批注檢查該類型是否未明確排除。該類型被定義為類,不是原始類型或泛型類型,並且不繼承自EntityObject。” 我想念什么?
我猜想是因為它們不在同一個命名空間中。 有沒有辦法解決這個問題?
我可能會誤解了您對名稱空間的評論,但為清楚起見,Partial類實際上是位於對應部分類的相同名稱空間中的部分類,否則您只是兩個單獨的具有相同名稱的單個類自稱是偏愛的。 在這種情況下,修復很簡單。 將它們放在相同的名稱空間中。
但是,更可能是由於將EntityObject添加到類層次結構中,如oerkelens所述。 EF 6創建POCO的代理,因此,您的類必須具有無參數的構造函數。 添加另一個類可能會阻止db上下文創建對象的代理。
從層次結構中僅刪除該類,檢查是否可以實現這些實體以進行驗證或排除。
編輯 -不,這絕對是由於EntityObject
。
我通過首先讓我的實體在部分類中實現一些接口來重現此問題。 效果很好。 然后,我從EntityObject
繼承了部分類,但由於您的錯誤而失敗。
重現此錯誤后,我創建了一個名為MyStupidClass
的類,並用MyStupidClass
替換了EntityObject
,我仍然可以實現實體(即使具有EntityObject
的頂級屬性)。
因此,這取決於您引入層次結構的類。
class Program
{
static void Main(string[] args)
{
using (var db = new schedulerEntities())
{
var schedules = db.Schedules.ToArray();
foreach (var schedule in schedules)
{
Console.WriteLine($"{schedule.Cron} - {schedule.FriendlyDescription}");
}
}
Console.ReadLine();
}
}
public partial class Schedule: MyStupidClass, IScheduler
{
public string FirstName { get; set; }
}
public class MyStupidClass
{
public EntityKey EntityKey { get; set; }
public EntityState State { get; set; }
}
interface IScheduler
{
long Id { get; set; }
string Name { get; set; }
string Cron { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.