2011-04-03 59 views
1

我搜索了很多關於如何使用EntityFramework或NHibernate映射多重繼承或多接口植入但我沒有發現任何有用的東西。如何使用NHibernate映射多個接口實現

我只是希望這種結構使用NHibernate映射:據我所知,這種結構映射到關係數據庫

public interface IA 
    { 
     string A { get; set; } 
    } 

    public interface IB 
    { 
     string B { get; set; } 
    } 

    public class C : IA, IB 
    { 
     string A { get; set; } 
     string B { get; set; }    
    } 

意味着只是爲了與接口的主鍵與外鍵,因此接口應有這樣的按鍵:

public interface IA 
{ 
    Guid AId { get; set; } 
    string A { get; set; } 
} 

public interface IB 
{ 
    Guid BId { get; set; } 
    string B { get; set; } 
} 

public class C : IA, IB 
{ 
    public virtual Guid AId { get; set; } 
    public virtual Guid BId { get; set; } 
    public virtual string A { get; set; } 
    public virtual string B { get; set; } 
} 

但如何使用NHibernate或者的EntityFramework映射這個結構,我不知道爲什麼多接口映射不是他們的文檔中提及!

回答

0

正如我所發現的,由於這個概念以及Diego所說的「不接口持久化場景」中的關係數據庫中的多重繼承是不可能的。

0

您將其映射爲任何其他類,因爲這不是繼承映射。而且你的代碼不能被編譯,因爲你必須實現C類的所有屬性,所以你會得到:

public interface IA 
{ 
    Guid AId { get; set; } 
    string A { get; set; } 
} 

public interface IB 
{ 
    Guid BId { get; set; } 
    string A { get; set; } 
} 

public class C : IA, IB 
{ 
    public virtual Guid AId { get; set; } 
    public virtual Guid BId { get; set; } 
    public virtual string A { get; set; } 
} 

現在您的代碼可以編譯和你有一流的任何其他。您將映射AId和BId作爲組合鍵(取決於使用的ORM),然後完成。這不是繼承,因爲你只有單一的實體而沒有基礎。至少這是它如何與實體框架一起工作。

+0

我剛剛編輯我的問題,因爲它似乎導致誤導,我想看看我怎麼可以映射它在NHibernate例如! – Hogaf 2011-04-03 11:20:10

+0

我也想要另一個實現了IA接口的類,所以稍後我會查詢IA接口。 – Hogaf 2011-04-03 11:30:21

+0

@Hossein:這是否有幫助:http://stackoverflow.com/questions/3612816/nhibernate-query-all-objects-implementing-an-interface? – 2011-04-03 11:45:53

1

在NHibernate中,您只需將C 映射爲好像接口不存在

由於隱含的多態性,您仍然可以在接口上進行查詢。

+0

爲什麼?!我需要將接口持久化,因爲我希望有其他類將來可以實現這些接口。考慮像C這樣的類已經實現了IA和IB或者更多的接口,並且我想要查詢IA類型的所有對象。 – Hogaf 2011-04-03 14:56:59

+0

@Hossein:你**不需要堅持接口來做到這一點。請閱讀我寫的內容。不可能堅持同一個類的兩個接口,這是沒有必要的。 – 2011-04-03 15:15:19