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;
}
}
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
@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 –
Nhưng đối với mã đầu tiên đó là danh sách gọn hơn –