我使用DB第一種方法實體框架和繼承
我有3個「訂單」列(客戶端記錄的順序)表。我想創建類似的邏輯來在我的.NET應用程序中重新排序,所以我想使用基類。我創建了以下結構:
,但項目無法編譯,列的順序不被映射爲每3個表,我沒有看到一個方法來映射它:
如何說,Order列應該映射到父類的屬性Order?
更新:
否則我要創建像類似的方法:
public interface IOrder
{
int Order { get; set; }
}
public partial class EscortDescription : IOrder
{
}
public partial class EscortGroup : IOrder
{
}
public partial class EscortItem : IOrder
{
}
private async Task ReorderEscortAsync(Infrastructure.IOrder item1, Infrastructure.IOrder item2)
{
Random rnd = new Random();
if (item1 == null)
throw new ArgumentNullException("firstItem");
if (item2 == null)
throw new ArgumentNullException("secondItem");
int tmpItem1Order = item1.Order;
int tmpItem2Order = item2.Order;
item1.Order = rnd.Next(int.MinValue, -1);
item2.Order = rnd.Next(int.MinValue, -1);
_db.SaveChanges();
item1.Order = tmpItem2Order;
item2.Order = tmpItem1Order;
await _db.SaveChangesAsync();
}
public async Task EscortGroupItemUpAsync(int ItemID)
{
var firstItem = (from i in _db.EscortItems where i.ID == ItemID select i).FirstOrDefault();
if (firstItem == null)
throw new Domain.RecordNotFoundException<int>(ItemID, "ID", "EscortItems");
var secondItem = (from i in _db.EscortItems where i.Order < firstItem.Order orderby i.Order descending select i).FirstOrDefault();
if (secondItem != null)
await ReorderEscortAsync(firstItem, secondItem);
else
throw new FirstRecordException();
}
public async Task EscortGroupItemDownAsync(int ItemID)
{
var secondItem = (from i in _db.EscortItems where i.ID == ItemID select i).FirstOrDefault();
if (secondItem == null)
throw new Domain.RecordNotFoundException<int>(ItemID, "ID", "EscortItems");
var firstItem = (from i in _db.EscortItems where i.Order > secondItem.Order orderby i.Order ascending select i).FirstOrDefault();
if (firstItem != null)
await ReorderEscortAsync(firstItem, secondItem);
else
throw new LastRecordException();
}
public async Task EscortGroupUpAsync(int ItemID)
{
var firstItem = (from i in _db.EscortGroups where i.ID == ItemID select i).FirstOrDefault();
if (firstItem == null)
throw new Domain.RecordNotFoundException<int>(ItemID, "ID", "EscortGroups");
var secondItem = (from i in _db.EscortGroups where i.Order < firstItem.Order orderby i.Order descending select i).FirstOrDefault();
if (secondItem != null)
await ReorderEscortAsync(firstItem, secondItem);
else
throw new FirstRecordException();
}
public async Task EscortGroupDownAsync(int ItemID)
{
var secondItem = (from i in _db.EscortGroups where i.ID == ItemID select i).FirstOrDefault();
if (secondItem == null)
throw new Domain.RecordNotFoundException<int>(ItemID, "ID", "EscortGroups");
var firstItem = (from i in _db.EscortGroups where i.Order > secondItem.Order orderby i.Order ascending select i).FirstOrDefault();
if (firstItem != null)
await ReorderEscortAsync(firstItem, secondItem);
else
throw new LastRecordException();
}
我想有一個方法,並傳遞基類的對象作爲參數
我覺得繼承不是這裏的正確方法。如果在此上下文中Order的含義是序列的順序,我認爲每個實體都應該有它自己的Order屬性。 –
我不想公開重新排序邏輯。我想有一個方法來重新排序和傳遞基類而不是具體的類 –
你做它很複雜,雖然它可能很簡單,我想這是可能的,但我甚至不建議你這樣做,因爲實體框架有時無法解析像這樣的邏輯。 –