2012-11-12 32 views
7

Có cách nào để lưu trữ dữ liệu trong các loại bảng này:tự động tuần tự với LINQ to SQL

http://pasteboard.s3.amazonaws.com/images/LDTcQpG.png

Bên SettingsModel cột, được định nghĩa trong Linq-to-Sql như thế này:

http://pasteboard.s3.amazonaws.com/images/LDXSPiM.png

Và cũng có tùy chọn DataContext được chuyển thành:

http://pasteboard.s3.amazonaws.com/images/LE1ddhn.png

Với SettingsModel lớp được định nghĩa như thế này:

namespace ElQueue.DataClasses 
{ 
    [DataContract] 
    public sealed class SettingsModel 
    { 
     [DataMember(IsRequired = true)] 
     public int[] VideoMediaData { get; set; } 
    } 
} 

Bằng cách này? ...

using (SomeDataContext dataContext = new SomeDataContext()) 
{ 
    SettingsModel m = new SettingsModel(); 
    m.VideoMediaData = new int[] { 1, 2, 3 }; 
    dataContext.MainTableSettings.InsertOnSubmit(new MainTableSetting() { SettingsModel = m }); 
    dataContext.SubmitChanges(); 
} 

using (SomeDataContext dataContext = new SomeDataContext()) 
{ 
    var r = dataContext.MainTableSettings.Single(); 
} 

Bạn thấy đấy, các mã trên doesnt làm việc một cách chính xác, nó được ném ngoại lệ mà nói rằng nó không thể chuyển đổi chuỗi để MainTableSetting có nghĩa là một trong hai nó không thể lưu tất cả các dữ liệu tuần tự hoặc cộng mà không thể deserialize nó trở lại.

Tôi cần một số lời khuyên làm cách nào để trỏ số này Linq-to-Sql để thực sự thực hiện tuần tự hóa (và ngược lại) khi tôi truy cập cơ sở dữ liệu.

Trả lời

4

Mặc dù bạn có thể ánh xạ XElement và XDocument để SQL Server như thể hiện trong hành vi Matrix Loại Mapping Run Time, phương pháp System.Data.Linq.DataContext.CreateDatabase có không mặc định SQL Server loại bản đồ cho các loại .

Nếu một lớp thực hiện Parse()ToString(), bạn có thể lập bản đồ các đối tượng cho bất kỳ loại văn bản SQL (CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, XML). Đối tượng được lưu trữ trong cơ sở dữ liệu bằng cách gửi giá trị được trả về bởi ToString() vào cột cơ sở dữ liệu được ánh xạ. Đối tượng được xây dựng lại bằng cách gọi Parse() trên chuỗi được cơ sở dữ liệu trả về.

http://msdn.microsoft.com/en-us/library/bb386947.aspx#TextMapping

public sealed class SettingsModel 
{ 
    // ... 

    public static SettingsModel Parse(string source) 
    { 
     SettingsModel res; 

     // Deserialise the object 

     return res; 
    } 
}