SORU
1 Temmuz 2011, Cuma


EF Code First "Geçersiz sütun'" 'elde edilir; ama hiçbir miras adı

Benim veritabanı Nöbetçi denilen (aşağıya bakınız CREATE TABLE deyimi bir tablo var. Birincil anahtar, yabancı anahtarları ve hiçbir şey hakkında özel bir çift. Benim veritabanı birçok kez buna benzer var, ama nedense, "" EF Proxy Sınıfı. sütun Ayırıcısını sonunda bu tablo

Bu C sınıfı ilan yapılır"#:

    public class SEntry
{
    public long SEntryId { get; set; }

    public long OriginatorId { get; set; }
    public DateTime DatePosted { get; set; }
    public string Message { get; set; }
    public byte DataEntrySource { get; set; }
    public string SourceLink { get; set; }
    public int SourceAppId { get; set; }
    public int? LocationId { get; set; }
    public long? ActivityId { get; set; }
    public short OriginatorObjectTypeId { get; set; }
}

public class EMData : DbContext
{
    public DbSet<SEntry> SEntries { get; set; }
            ...
    }

Bu tabloya yeni bir satır eklemek istediğimde şöyle bir hata alıyorum:

System.Data.SqlClient.SqlException: Invalid column name 'Discriminator'.

Bu sorun hakkında bulduğum her şeyi, sadece C devralmasını oluşur# başka bir sınıftan sınıf, ancak Nöbetçi bir şey devralmasını değil yukarıda gördüğünüz gibi).

Ben Nöbetçi özelliği için EMData örneği üzerinde fare ne zaman hata ayıklayıcı aracı ihbar alınca buna ek olarak, görüntüler:

base {System.Data.Entity.Infrastructure.DbQuery<EM.SEntry>} = {SELECT 
[Extent1].[Discriminator] AS [Discriminator], 
[Extent1].[SEntryId] AS [SEntryId], 
[Extent1].[OriginatorId] AS [OriginatorId], 
[Extent1].[DatePosted] AS [DatePosted], 
[Extent1].[Message] AS [Message], 
[Extent1].[DataEntrySource] AS [DataE...

Herhangi bir öneri ya da bu konu altına almak için fikirler? Tablo, birincil anahtar ve diğer bir kaç şey yeniden adlandırma denedim, ama olmadı.

SQL-Tablo:

CREATE TABLE [dbo].[SEntries](
[SEntryId] [bigint] IDENTITY(1125899906842624,1) NOT NULL,
[OriginatorId] [bigint] NOT NULL,
[DatePosted] [datetime] NOT NULL,
[Message] [nvarchar](500) NOT NULL,
[DataEntrySource] [tinyint] NOT NULL,
[SourceLink] [nvarchar](100) NULL,
[SourceAppId] [int] NOT NULL,
[LocationId] [int] NULL,
[ActivityId] [bigint] NULL,
[OriginatorObjectTypeId] [smallint] NOT NULL,
CONSTRAINT [PK_SEntries] PRIMARY KEY CLUSTERED 
(
[SEntryId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,       ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[SEntries]  WITH CHECK ADD  CONSTRAINT [FK_SEntries_ObjectTypes] FOREIGN KEY([OriginatorObjectTypeId])
REFERENCES [dbo].[ObjectTypes] ([ObjectTypeId])
GO

ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_ObjectTypes]
GO

ALTER TABLE [dbo].[SEntries]  WITH CHECK ADD  CONSTRAINT [FK_SEntries_SourceApps] FOREIGN KEY([SourceAppId])
REFERENCES [dbo].[SourceApps] ([SourceAppId])
GO

ALTER TABLE [dbo].[SEntries] CHECK CONSTRAINT [FK_SEntries_SourceApps]
GO

CEVAP
5 Temmuz 2011, Salı


Meğer bu Varlık Çerçevesi farz olan herhangi bir sınıf devralır bir POCO sınıf olduğunu eşlenen bir tablo üzerinde veritabanı gerektirir bir sütun Ayırıcısını bile türetilmiş sınıf olmayacak kayıtlı bir DB.

Çözüm oldukça basit ve sadece [NotMapped] türetilmiş sınıf bir nitelik olarak eklemek lazım.

Örnek:

class Person
{
    public string Name { get; set; }
}

[NotMapped]
class PersonViewModel : Person
{
    public bool UpdateProfile { get; set; }
}

Eğer veritabanı üzerinde Kişi masaya Kişi sınıfı göster eğer şimdi bile, bir "elde edilir türetilmiş bir sınıf olduğundan" sütun oluşturulmayacak [NotMapped].

Ek bir ipucu olarak, [NotMapped] DB üzerinde bir alana göster istemiyorum özelliklerini kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EEVblog

    EEVblog

    4 NİSAN 2009
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • martin shervington

    martin sherv

    7 EKİM 2011