我們的數據庫沒有外鍵,但我們希望能夠使用SubSonic。除了用外鍵來表示表之間的關係外,還有什麼辦法嗎?有了SubSonic,有沒有一種方法可以在沒有外鍵的情況下表達關係?
1
A
回答
3
有跡象表明,我想起三種可能的解決方案:
一)難的方法:不要寄託都自己
由亞音速生成的每個類是局部類。您可以創建一個新的文件,並添加了ForeignKey的關係,自己屬性的方法:
這是從內存中寫的,而不是測試partial class Order
{
private OrderDetailCollection orderDetails;
public OrderDetailCollection OrderDetails
{
get
{
if (orderDetailCollection == null)
orderDetailCollection = new OrderDetailCollection()
.Where(OrderDetailCollection.Columns.OrderId, this.Id).Load();
return orderDetailCollection;
}
set
{
if (value != null)
{
foreach(OrderDetail orderDetail in value)
orderDetail.OrderId = this.Id;
}
orderDetailCollection = value;
}
}
}
public Class OrderDetail
{
private Order order;
public Order Order
{
get { return order ?? DB.Select().From<Order>()
.Where(Id).IsEqualTo(this.OrderId)
.ExecuteSingle<Order>(); }
set
{
this.OrderId = value == null ? 0 : value.Id;
this.Order = value;
}
}
}
。您可以查看生成的代碼或模板應該如何(SubSonic添加一些事件處理程序,用於添加和刪除項目以處理ParentId更新並在BindingContext右側維護DeleteList以供使用)
b)簡單的方法:爲使用外鍵的代碼生成一個數據庫(我會推薦這個解決方案),讓SubSonic爲你生成外鍵部分。 請勿觸摸您的生產數據庫。
在運行時SubSonic(至少2.x)不依賴任何真正的外鍵存在。信息模式僅在DAL生成期間被查詢。
三)面向對象的方法:從你目前使用的一個繼承了寫自己的亞音速的DataProvider和覆蓋GetTableSchema()方法
public override TableSchema.Table GetTableSchema(string tableName, TableType tableType)
{
TableSchema.Table tbl = base.GetTableSchema(tableName, tableType)
if (tableName == "Orders")
{
tbl.ForeignKeys = new TableSchema.ForeignKeyTableCollection();
tbl.Columns.GetColumn("Id").ForeignKeyTableName = "OrderDetails";
TableSchema.ForeignKeyTable fkTable = new TableSchema.ForeignKeyTable(this);
fkTable.ColumnName = "OrderId";
fkTable.TableName = "OrderDetails";
tbl.ForeignKeys.Add(fkTable);
}
else if (tableName == "SomethingElse)
{
....
}
}
在這種方法中的所有信息架構數據拉從數據庫並用於設置您的數據庫的內存表示。這裏是MySqlInnoDbDataProvider的源:http://github.com/subsonic/SubSonic-2.0/blob/master/SubSonic/DataProviders/MySqlInnoDBDataProvider.cs
(MySQL的數據提供者是一個很好的例子,因爲默認的「MySqlDataProvider」不產生FK-關係,即使有一個InnoDB數據庫和「MySqlInnoDbDataProvider」使用從它繼承和覆蓋所需的部件。
在你的app.config/web.config中可以定義爲DataProvider的一代。
這些建議是SubSonic2但可能適用於SubSonic3。
相關問題
- 1. 有沒有一種方法可以讓WiX在每種情況下抑制ICE
- 2. 有沒有一種方法可以在沒有登錄Netsuite的情況下提供可用的Suitelet表單?
- 3. 有沒有一種方法可以告訴DataReader是否在沒有調用.Read()的情況下迭代了?
- 4. 有沒有一種方法可以接收外焦表單的關鍵輸入?
- 5. 外鍵關係沒有意義,有沒有更好的方法?
- 6. 有沒有方法可以在沒有GraphQL的情況下使用Relay?
- 7. 在沒有外鍵的情況下在關係表中添加一列 - 休眠
- 8. 有沒有一種方法可以在沒有iframe覆蓋的情況下在Silverlight中顯示HTML?
- 9. DynamoDB:有沒有一種方法可以在沒有LastEvaluatedKey的情況下獲取任意頁面?
- 10. 有沒有一種方法可以在沒有_id字段的情況下從MongoDB中檢索數據?
- 11. Git-Stash:有沒有一種方法可以防止合併功能在沒有rebase的情況下發展?
- 12. 有沒有一種方法可以在沒有onclick事件的情況下使用onclick?
- 13. 有沒有一種方法可以在沒有網絡服務器的情況下發送php post請求?
- 14. 有沒有一種方法可以在沒有持續推送通知的情況下顯示倒計時?
- 15. ScalaTest in sbt:有沒有一種方法可以在沒有標籤的情況下運行單個測試?
- 16. 有沒有一種方法可以在沒有Composer的情況下自動加載ZF3?
- 17. 有沒有一種方法可以在沒有構建應用程序的情況下練習單元測試?
- 18. 有沒有方法可以在沒有按下Ctrl鍵的情況下在ObjectListView中進行多重選擇?
- 19. 有沒有什麼方法可以在不使用聯結表的情況下表示多對多關係?
- 20. SQLAlchemy關係沒有外鍵
- 21. Linq2Sql:我可以使用外鍵關係在兩個表中沒有主鍵的情況下創建實體嗎?
- 22. 在沒有連接兩個表的情況下選擇一列(具有外鍵)
- 23. 有沒有一種方法可以在沒有os.chmod的* nix系統下使用Python創建可執行文件?
- 24. 笨:沒有在某種情況下
- 25. 有沒有一種方法可以讓表單在不使用iFrame的情況下位於頂層
- 26. 開關的情況下沒有在JavaScript
- 27. 在Visual Studio中,有沒有一種方法可以按使用情況對私有方法進行排序?
- 28. 有沒有一種簡單的方法來在沒有JavaScript的情況下在PHP中獲取圖像大小?
- 29. 在C++映射中,有沒有什麼方法可以在給定值的情況下搜索關鍵字?
- 30. 如何在ActiveRecord中沒有外鍵的情況下定義關係?