2011-03-17 29 views
2

。我遇到了linq to sql的問題。Linq to sql,每個人都繼承重複列

我使用來自System.Data.Linq.Mapping的屬性來映射我的類和表。 我注意到,我的代碼中重複了一些列定義(例如ID)。所以我想將這些定義移到基類。我已經寫了這樣的事情:

public abstract class BasicEntity 
{ 
    [Column(IsDbGenerated=true, IsPrimaryKey=true)] 
    public int ID { get; set; } 
} 

[Table(Name = "Users")] 
public class User : BasicEntity 
{ 
    [Column(Name = "Name")] 
    public string Name { get; set; } 
} 

public class TestDataContext : DataContext 
{ 
    public TestDataContext(string connectionString) : base (connectionString) { } 
    public Table<User> Users { get { return this.GetTable<User>(); } } 
} 

....

{ 
    TestDataContext context = new TestDataContext(validConnectionString); 
    if(context.DatabaseExists()) 
     context.DeleteDatabase(); 
    context.CreateDatabase(); // an exception thrown from here 
} 

所以,當我嘗試創建一個數據庫,我有一個System.Data.SqlClient.SqlException,那就是:「名爲」ID「的列在目標表或視圖中不存在。」 很明顯,這個異常是由我的BasicEntity引起的。

最後,我的問題是:有沒有辦法繼承列定義來刪除重複的代碼?

而且要清楚 - 我使用#develop,它沒有花哨的LINQ2SQL designer/codegenerator,就像VS.

非常感謝提前。

+0

你有多少個實體具有「相同」名稱屬性?我要問的原因,因爲除非它是非常大的數目,否則你所引入的複雜性是不值得的 – 2011-03-17 16:29:39

+0

在一個特定項目中沒有太多的實體,雖然這樣的機制會節省我大量的時間,因爲我會遇到這個在很多未來的項目中都會遇到問 – Dmitriy 2011-03-17 17:23:13

回答

1

在LINQ to SQL中,基類和派生類屬性必須存在於同一個表中。就你而言,我懷疑共同領域存在於多個表中。 LINQ to SQL不支持這種映射。您可能需要使用EF來處理這種繼承映射。

+0

親愛的吉姆,謝謝你的回覆,我會考慮在未來使用EF。 – Dmitriy 2011-03-22 12:54:23

1

我遇到過類似的情況,因爲我正在處理8個不同表的主數據庫和8個外鍵約束的數據庫。

所有8臺共享完全相同的列名和外鍵約束上具有不同的列名/類型等,只有他們的數據字段和它們的主鍵字段

我想作一個SQL的LINQ的DataContext與實體它,但我不想在每種類型上定義相同的8列。所以我把它們放在基類型XYZDataEntryEntity中。

我遇到了這個錯誤,所以我有一個想法,我讓所有的基類虛擬的列。我標記他們列在基類的屬性,我直接無視了他們在derrived類,像

public override int InstitutionID 
    { 
     get 
     { 
      return base.InstitutionID; 
     } 
     set 
     { 
      base.InstitutionID = value; 
     } 
    } 

然後我抱怨,因爲私人領域是不可用的,例如

[列(存儲= 「_XYZStatus」 的DbType = 「內部NOT NULL =」 NAME = 「Column_Name_here」)

_XYZStatus是不可用的,我想,是啊,因爲它是在基類。

所以我讓_XYZStatus受到保護而不是私人的,所以鏤空的班級可以看到它,並且像魔術一樣。一切正常。

當然,我必須在每個類中重寫相同的8個屬性才能工作,但我只需在基類中對它們進行更改,並且它至少將它們全部綁定到相同的基類和相同的8個屬性。