2012-01-04 31 views
5

Hey Tôi đang cố gắng lưu trữ một đơn giản byte[] sử dụng EF 4 MySQL (trình kết nối mới nhất) và cách tiếp cận mã đầu tiên.Lưu trữ mảng byte bằng Entity Framework 4, MySQL và mã đầu tiên?

Đơn giản chỉ cần thực hiện:

public byte[] Thumbnail {get; set;} 

mang lại cho tôi những lỗi sau khi tạo:

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn rằng tương ứng với phiên bản máy chủ MySQL của bạn cho đúng cú pháp để sử dụng gần

Và sau đó nó trỏ tới điều gì sẽ đến ngay sau khi tuyên bố byte[] tôi.

Bất kỳ ai có bất kỳ mẹo nhanh nào cho tôi?

+0

Tôi có bỏ lỡ điều gì đó không? Khung thực thể không chỉ tương thích với SQL Server? Khung làm việc – Yuck

+0

@Yuck Entity không chỉ tương thích với SQL Server, bạn có thể xem danh sách ở đây: http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework#Entity_Framework_ADO.NET_providers –

+0

Nhưng đối với mã đầu tiên đó là danh sách gọn hơn –

Trả lời

2

Bạn cần sử dụng thuộc tính MaxLength.

[MaxLength(16)] 
public byte[] test { get; set; } 

Lưu ý rằng biến trên nó thành một datatype tinyblob, wich can have indexing/primary key problems. Khi sử dụng di cư nó biến thành này:

AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "tinyblob")); 

Bạn có thể sử dụng thuộc tính column và thiết lập TypeName-"Binary" nếu bạn cần lập chỉ mục/Primary Key.

[MaxLength(16), Column(TypeName = "Binary")] 
public byte[] test { get; set; } 

Mặc dù kết quả ở trên trong cột nhị phân (1) cho tôi (đó là cách tôi nhận tại đây).

Edit: Để có được một chiều dài mảng nhị phân đúng, chỉ cần thêm (16) sau binary trong file di cư:

AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "binary(16)")); 

Thật không may, thêm nó trở thành sự typename của thuộc tính Column không hoạt động.

Chỉnh sửa2: Có thể lấy cơ sở dữ liệu chính xác mà không cần phải chỉnh sửa tệp di chuyển bằng cách tạo một MySqlMigrationSqlGenerator tùy chỉnh.

internal class CustomMySqlMigrationSqlGenerator : MySqlMigrationSqlGenerator 
{ 
    protected override MigrationStatement Generate(CreateTableOperation op) 
    { 
     MigrationStatement statement = base.Generate(op); 

     foreach (ColumnModel column in op.Columns) 
     { 
      if (column.MaxLength.HasValue) 
      { 
       statement.Sql = statement.Sql.Replace($"`{column.Name}` binary", $"`{column.Name}` binary({column.MaxLength.Value})"); 
      } 
     } 

     return statement; 
    } 
} 
+0

Wow ... Bài đăng cũ 4 năm. Uhm, tôi không có cách nào để xác nhận điều này là đúng, vì vậy tôi sẽ lấy từ của bạn cho nó – Dynde

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