[英]How to define common column names in entity framework 4.4
結合使用Entity Framework 4.4
和數據庫優先方法。 我在大多數表(例如CreateDate)中定義了一個公共column
。
我不想為每種類型編寫日期過濾查詢,並試圖避免reflection
我試圖定義一個接口 ICreateDate
例如:
interface ICreateDate
{
System.DateTime CreateDate { get; set; }
}
自動生成的類:
//-----------------------------------------------------------------------------
// <auto-generated>
// ...
// </auto-generated>
//-----------------------------------------------------------------------------
namespace Project.Entity
{
using System;
using System.Collections.Generic;
public partial class SomeEntityClass
{
public System.DateTime CreateDate { get; set; }
}
}
部分課程:
public partial class SomeEntityClass : ICreateDate { }
異常代碼:
private void SomeMethod()
{
using (ProjectModel pm = new ProjectModel())
{
IQueryable<ICreateDate> qry = pm.SomeEntityClass.AsQueryable().Cast<ICreateDate>();
qry = DateFilter(qry);
}
}
private IQueryable<ICreateDate> DateFilter(IQueryable<ICreateDate> queryable)
{
queryable = queryable.Where(q => q.CreateDate >= SomeRandomDate1 && q.CreateDate <= SomeRandomDate2);
return queryable.OrderByDescending(q => q.CreateDate);
}
傳遞IQueryable<SomeEntityClass>
嘗試失敗,並帶有異常消息:
無法將類型“ Project.Entity.SomeEntityClass”強制轉換為類型“ Project.Entity.ICreateDate”。 LINQ to Entities僅支持強制轉換EDM基本類型或枚舉類型。
由於LINQ to Entities僅支持轉換EDM原語或枚舉類型,因此反射是我唯一的選擇?
注意:我嘗試按照Erik Philips的 建議使用通用方法,但是發生了相同的確切錯誤編輯:我發現Entity Framework版本為4.4
,我想將EF 5.0添加到.NET 4.0項目中
由於LINQ to Entities僅支持轉換EDM原語或枚舉類型,因此反射是我唯一的選擇?
否。數據庫類是Partial類,因此您可以定義一個接口:
public interface ICreateDate
{
DateTime CreateDate { get; set; }
}
讓EF通過代碼生成來創建您的實體對象之一,它應該類似於:
// MyObject.cs
public partial MyObject
{
public DateTime CreateDate { get; set; }
}
創建自己的局部類:
// MyObjectPartial.cs
public partial MyObject : ICreateDate
{
}
然后使用where子句創建一個通用方法:
public IQueryable<T> DateFilter<T>(IQueryable<T> queryable)
where T : ICreateDate
{
//code
}
我個人有一個EntityBase類,通常包含一個Id
和一個CreatedOn
。
然后,您處理實體的所有方法都可以訪問這些屬性(或者,如果您使用的是可在任何實體上使用的方法,只需將其Method<EntityBase>
為Method<EntityBase>
)
public class EntityBase
{
public DateTime CreatedOn { get; set; }
public int Id { get; set; }
}
public class SomeEntity : EntityBase
{
/*.....*/
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.