2013-02-11 55 views
1

我在我的asp.net C#web應用程序中使用Telerik Open Access ORM。 在我的應用程序中,我已將映射來自數據庫「Person」的表實體映射爲基類,並創建了一個名爲「Employee」的子域類。 然後我已經將子類的垂直繼承應用於Base類,並使用Employee子類的「默認映射」。執行查詢時出錯:Telerik.OpenAccess.RT.sql.SQLException:無效的對象名'Employee'

在查詢兩個基地/子類我得到錯誤:

錯誤執行查詢:Telerik.OpenAccess.RT.sql.SQLException:無效的對象名稱「僱員」。

這些都是行添加從上下文查詢:

 using (EntitiesModel1 obj = new EntitiesModel1()) 
     { 
      List<Employee> lstEmp = obj.Employees.ToList(); 
      GridView1.DataSource = lstEmp; 
      GridView1.DataBind(); 
     } 

請幫助。

+0

你可以給一些代碼嗎?很難想象你沒有看到的東西。 – HerpaMoTeH 2013-02-11 07:35:21

+0

因此Employee從Person繼承而來,並不是實際的表,對嗎? – 2013-02-11 13:44:07

+0

是的。員工繼承Person表。 Person是實際表和Employee而不是物理表。 – user2054030 2013-02-12 04:19:14

回答

1

當您將繼承策略指定爲「垂直」時,這意味着每個類都有自己的物理表。因此,您會收到'Employee'表丟失的錯誤。

如果要將Person和Employee的實例存儲在單個表「Person」中,則需要使用默認的Inheritance策略,即「Flat」。

如果您想創建額外的'Employee'表,那麼您可以使用Schema Handler API並讓OpenAccess生成apporriate ddl。

var context = new EntityDiagram(); 
var schemaHandler = context.GetSchemaHandler(); 
var ddl = schemaHandler.CreateUpdateDDLScript(null); 
if(string.IsNullOrEmpty(ddl) == false) 
    schemaHandler.ExecuteDDLScript(ddl);