2010-01-01 64 views
25

Tôi muốn tạo thuộc tính tùy chỉnh trên một trong các thực thể của tôi được ánh xạ từ cơ sở dữ liệu, tuy nhiên thuộc tính này không được ánh xạ tới cơ sở dữ liệu. khi cố gắng biên dịch, tôi nhận được thông báo lỗi cho biết rằng thuộc tính không được ánh xạ. Có một thuộc tính hoặc cái gì tôi nên thêm? Cảm ơn trước.Tạo thuộc tính không được ánh xạ trong thực thể (khung thực thể)

+3

Sử dụng các lớp học một phần là cách chính xác để thực hiện việc này và hoạt động tốt cho tôi. Bạn cần hiển thị mã của bạn, ánh xạ của bạn và lỗi chính xác, như những gì bạn đã mô tả cho đến nay đã hoạt động. –

Trả lời

7

Sử dụng các lớp học một phần để thêm thuộc tính hoặc phương pháp bạn muốn thêm. Ví dụ.

namespace WhateverNamespaceYourEntityModelIsIn 
{ 
    public partial class TheNameOfYourEntity 
    { 
      public string MyNewProperty { get; set; } 
    } 
} 

và điều đó sẽ làm bạn.

+0

nếu bạn đang xử lý Mã số đầu tiên, hãy đọc thêm bên dưới – bkwdesign

+1

đây là câu trả lời sai trong trường hợp Mã số đầu tiên – Toolkit

+0

Đối với mã đầu tiên, hãy xem câu trả lời của Kniganapolke cụ thể. Sử dụng [NotMapped]. –

69

Bạn cũng có thể đánh dấu thuộc tính của mình với thuộc tính [NotMapped] hoặc sử dụng phương thức Ignore từ API thông thạo.

tài sản

public class EntityName 
{ 
    [NotMapped] 
    private string PropertyName { get; } 
} 

thạo API

public class Entities : DbContext 
{ 
    public DbSet<EntityType> Users { get; set; } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Some database configuration 
     modelBuilder.Entity<EntityType>() 
      .Ignore(i => i.PropertyName); 
    } 
} 
+0

đây là giải pháp tốt khi bạn muốn thêm thuộc tính vào đối tượng thực thể nhưng không muốn chúng được liên kết với cơ sở dữ liệu hoặc tệp ánh xạ – mknopf

+0

Sử dụng thuộc tính [NotMapped] là cách dễ nhất để đi nếu bạn có thuộc tính bạn cần tất cả các entite như EntityState mà bạn khai báo trên một lớp cơ sở. Không cần phải chỉnh sửa mọi lớp cấu hình và nhớ làm như vậy mỗi lần một thực thể mới được giới thiệu. –

+0

Xin chào, cảm ơn câu trả lời của bạn. Nhưng khi tôi thử nó, tôi nhận được: "Không hỗ trợ giá trị không được phân loại trong loại không mở." Tôi đang làm gì sai? – Toodoo

1

Tôi nghiêm túc muộn để nói chuyện, nhưng bạn cũng muốn đánh dấu các phần như serializable và tài sản như serializable - nếu bạn đã từng lập kế hoạch JSON hoặc sắp xếp lại các đối tượng:

[Serializable()] 
public partial class MyClass { 
    private System.Nullable<int> _Age; 
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 4)] 
    public System.Nullable<int> Age { 
      ... 
    } 
} 

Cả hai chỉ thị [Serializable()] và [global:] là cần thiết. Nếu bạn đã loại trừ [global:], bất kỳ khi nào bạn đã tuần tự hóa nó, nó sẽ bị bỏ qua và không được đưa vào tuần tự hóa.

+0

Tuyệt vời! Tôi đã quay bánh xe của tôi quá lâu để cố gắng tìm ra lý do tại sao chỉ một trong các biến được đăng của tôi luôn là rỗng. Điều này đã làm các trick! Cảm ơn! – RobDigital

0

Trang này thực sự đã giúp tôi. Tôi sẽ thêm chính xác những gì tôi đã thêm vào cấu hình ánh xạ của mình sau khi nhìn thấy câu trả lời của Kniganapolke.

public TheObjectName() 
    { 
     this.HasKey(t => t.ID); 
     this.Ignore(t => t.IsProcess); //we don't want EF to worry about this 
    } 

Cảm ơn mọi người, cảm ơn SO!

Các vấn đề liên quan