2013-02-11 8 views
7

मैं एंटीटी फ्रेमवर्क 5 - कोड पहले का उपयोग कर रहा हूं।इकाई फ्रेमवर्क कोड में विभिन्न डेटाटाइप के कॉलम और इकाई प्रोपरी को मैप करने के लिए कैसे करें

मेरे पास एक डेटाबेस है जिसे मैं कनेक्ट कर रहा हूं जो कुछ समय से पहले से मौजूद है (मैंने इसे नहीं बनाया है)। T_Customers नामक एक टेबल है। इसमें सभी ग्राहकों की एक सूची है। यह निम्न संरचना (केवल आंशिक रूप से दिखाया गया है) है:

Customer_id | numeric (5, 0) | auto increment | not null (not set as primary key) 
FName | varchar(50) | not null 
LName | varchar(50) | not null 

मेरे Customer वर्ग:

public class Customer : IEntity 
{ 
    public int Id { get; set; } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 
} 

मेरे IEntity इंटरफ़ेस:

public interface IEntity 
{ 
    int Id { get; set; } 
} 

मैं अपने डेटाबेस संदर्भ कक्षा में निम्नलिखित है:

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext(string connectionString) 
      : base(connectionString) 
    { 
    } 

    public DbSet<Customer> Customers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Configurations.Add(new CustomerConfiguration()); 
    } 

    public new DbSet<TEntity> Set<TEntity>() 
      where TEntity : class, IEntity 
    { 
      return base.Set<TEntity>(); 
    } 
} 

मेरे ग्राहक विन्यास वर्ग:

class CustomerConfiguration : EntityTypeConfiguration<Customer> 
{ 
    internal CustomerConfiguration() 
    { 
      this.ToTable("T_Customers"); 
      this.Property(x => x.Id).HasColumnName("Customer_id"); 
      this.Property(x => x.FirstName).HasColumnName("FName"); 
      this.Property(x => x.LastName).HasColumnName("LName"); 
    } 
} 

मैं अपने इकाई घोषणाओं में एक समान होना चाहिए कोशिश कर रहा हूँ, मैं सभी आईडी की जरूरत है पूर्णांकों किया जाना है। यह ग्राहक आईडी डेटाबेस में संख्यात्मक है, और अब मैं सभी ग्राहकों की सूची लौटने की कोशिश करते समय मुद्दों में भाग रहा हूं। मैं डेटाबेस संख्यात्मक प्रकार से सी # पूर्णांक प्रकार से कैसे मानचित्र करूं? मैं अपनी कक्षा की आईडी को शून्य या दशमलव में नहीं बदल रहा हूं, मेरी आईडी हमेशा गैर शून्य और पूर्णांक होती है। मैं डेटाबेस भी नहीं बदल सकता।

त्रुटि है कि मैं हो रही है:

int myInt = Convert.Int32(numberFromDatabase); 

उत्तर

6

स्तंभ

Property(x => x.Id).HasColumnName("Customer_id").HasColumnType("numeric"); 

के लिए सांख्यिक प्रकार निर्दिष्ट करें जब डेटाबेस उत्पन्न करते समय, सटीक 18,0 साथ संख्यात्मक स्तंभ का निर्माण करेगा। लेकिन जब आप मौजूदा डेटाबेस में मैपिंग कर रहे हैं, तो यह 5,0 संख्यात्मक कॉलम के साथ ठीक काम करेगा।

+0

धन्यवाद। अगर मुझे एक अलग परिशुद्धता की आवश्यकता है तो 18, 0? क्या यह 5,0 की सटीकता से चिपकना बेहतर है? –

+0

@ ब्रेंडनवोग अच्छी तरह से, आपने कहा है कि आपके पास पहले से ही मौजूदा डेटाबेस है, इसलिए आपकी सटीकता '5,0' रहेगी। यदि आप कोड से नया डेटाबेस जेनरेट करेंगे, तो इस कॉलम में सटीकता '18,0' होगी। इसलिए, यदि आपके पास पहले से ही सटीकता '5,0' है तो आपको कुछ भी बदलने की आवश्यकता नहीं है। बीटीडब्ल्यू इंटीजर का मूल्य 99 99 9 से बड़ा हो सकता है, इसलिए यह दिमाग में है। –

+1

धन्यवाद! इससे आज मेरा काम बन गया। – tuseau

-2

आप के साथ किसी पूर्णांक पर रूपांतरित कर सकते हैं क्षेत्र, और आईडी संपत्ति इस क्षेत्र को पढ़/लिख जाएगी। कुछ इस तरह:

public class Customer : IEntity 
{ 
    public decimal CustomerID {get; set;} 

    [NotMapped] 
    public int Id 
    { 
     get { return (int)CustomerID; } 
     set { CustomerID = (int)value; } 
    } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 
} 

मानचित्र डाटाबेस क्षेत्र को यह नया क्षेत्र है,

this.Property(x => x.CustomerID).HasColumnName("Customer_id"); 

का उपयोग करने और एफई ग्राहक आईडी क्षेत्र का उपयोग करेगा, और अपने कोड खुशी से पूर्णांक आईडी क्षेत्र इस्तेमाल कर सकते हैं।

3

सरल समाधान के किसी अन्य क्षेत्र है कि डेटाबेस के लिए मैप किया जाएगा उपयोग करने के लिए है:

The 'Id' property on 'Customer' could not be set to a 'Decimal' value. 
You must set this property to a non-null value of type 'Int32'. 
-1

एक अन्य विकल्प बाहर काम करने के क्या कोड पहले होना चाहिए करने के लिए एमएस एफई PowerTools http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

आप एक खाली परियोजना एफई रिवर्स इंजीनियर कोड पहले डीबी से जोड़ सकते हैं, राइट क्लिक करें।

आप अक्सर (हमेशा नहीं) समाधान के लिए अच्छी शुरुआत करते हैं। क्या आपने दशमलव का उपयोग करने का प्रयास किया था?

public class Customer : IEntity 
{ 
public decimal Id { get; set; } 

public string FirstName { get; set; } 

public string LastName { get; set; } 
} 

यदि आप परिशुद्धता से चिंतित हैं, तो आपको पीओसीओ में सत्यापन जोड़ना चाहिए।

कुछ रोचक एनोटेशन हैक्स भी आपको पसंद हो सकते हैं। http://geekswithblogs.net/danemorgridge/archive/2010/12/20/ef4-code-first-control-unicode-and-decimal-precision-scale-with.aspx शुभकामनाएं

संबंधित मुद्दे