2009-02-28 30 views
0

Ben SQL Linq to kullanarak DB benim miras hiyerarşisini haritasına çalışıyorum SQL içinHarita miras

public interface IStage 
{ ... } 

public abstract class SimpleStage<T> : IStage where T : Process 
{ ... } 

public class ConcreteStage : SimpleStage<ConcreteProcess> 
{ ... } 
Ben olsun runtime

<Database Name="NNN" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"> 
    <Table Name="dbo.Stage" Member="Stage"> 
    <Type Name="BusinessLogic.Domain.IStage"> 
     <Column Name="ID" Member="ID" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" /> 
     <Column Name="StageType" Member="StageType" IsDiscriminator="true" /> 
     <Type Name="BusinessLogic.Domain.SimpleStage" IsInheritanceDefault="true"> 
     <Type Name="BusinessLogic.Domain.ConcreteStage" IsInheritanceDefault="true" InheritanceCode="1"/> 
     </Type> 
    </Type> 
    </Table> 
</Database> 

hata:

İşte haritalama olan System.InvalidOperationException işlenmeyen İleti = "haritalama sorun oldu: 'türü eşlemesi için çalışma zamanı türü bulunamıyor BusinessLogic.Domain.Simpl eStage'."

Ne SimpleStage ne de eşleme dosyasında SimpleStage <T> belirtilmekte olan yardımcı çalışma zamanı farklı türde hatalar üretmeye devam etmektedir.

DC böyle oluşturulur: Bu desteklemiyor Linq to SQL Eğer

StreamReader sr = new StreamReader(@"MappingFile.map"); 
XmlMappingSource mapping = XmlMappingSource.FromStream(sr.BaseStream); 
DataContext dc = new DataContext(@"connection string", mapping); 

, sen yapar başka ORM, tavsiye misiniz. Teşekkürler,

Saygılar!

Ksenia

cevap

0

dosyalara başvuru eklediniz ve ayrıca ifadelerini kullanarak başvuruları ithal ediyoruz? VEYA tam nitelikli sınıf isimlerini kullanarak?

+0

yazdığında haritalama dosyası ile sorunu giderildi böylece IL yılında Adından SimpleStage'1 < ...> benziyor, sen ne hakkında referanslar konuşmak? Sınıflarımı LINQ ile ilgili özniteliklerle süslemek istediğinizde, hayır, POCO sınıflarını kullanıyorum ve yalnızca XML dosyasında eşleme sağladım –

+0

Üzgünüz. Project -> Add Reference (Referans Ekle) ve ardından BusinessLogic.Domain.IStage için derlemeyi seçme kütüphaneyi BusinessLogic.Domain kullanarak içe aktarmak; –

+0

oh, tabii ki BL montajına ve tüm gerekli kullanımlara –

0

Bunun nedeni, SimpleStage'daki genel T türünden kaynaklanmaktadır: T, jenerik olarak SimpleStage için bir eşleme arama tablosu oluşturamaz.

+0

evet, bunun da jenerik olduğunu düşünüyorum. ama bir şekilde haritalamayı gerçekleştirmenin bir yolu olup olmadığını merak ediyordum, belki başka ORM kullanıyordum –

1

Genel sınıfımın IL'sine baktıktan sonra cevabı kendim buldum. Ben oldukça anlamadı üzgün

<Type Name="BusinessLogic.Domain.SimpleStage`1" ...