Tôi đang tìm cách duy trì tùy chọn người dùng thành tập hợp các cặp giá trị tên, trong đó giá trị có thể là int, bool hoặc chuỗi.Làm thế nào để ánh xạ IDictionary <string, object> trong Fluent NHibernate?
Có một vài cách để da mèo này, nhưng phương pháp thuận tiện nhất mà tôi có thể nghĩ đến là một cái gì đó như thế này:
public class User
{
public virtual IDictionary<string, object> Preferences { get; set; }
}
với việc sử dụng của nó như:
user.Preferences["preference1"] = "some value";
user.Preferences["preference2"] = 10;
user.Preferences["preference3"] = true;
var pref = (int)user.Preferences["preference2"];
Tôi không chắc chắn làm thế nào để bản đồ này trong Fluent NHibernate, mặc dù tôi nghĩ rằng đó là có thể.
Nói chung, bạn sẽ ánh xạ một đơn giản từ điển < string, string > như:
HasMany(x => x.Preferences)
.Table("Preferences")
.AsMap("preferenceName")
.Element("preferenceValue");
Nhưng với một loại 'đối tượng', NHibernate không biết làm thế nào để đối phó với nó. Tôi tưởng tượng một UserType tùy chỉnh có thể được tạo ra mà phá vỡ một 'đối tượng' xuống đến một chuỗi đại diện cho loại của nó và một chuỗi đại diện cho giá trị. Chúng tôi sẽ có một bảng trông loại như thế này:
Table Preferences
userId (int)
preferenceName (varchar)
preferenceValue (varchar)
preferenceValueType (varchar)
và lập bản đồ ngủ đông sẽ như thế này:
<map name="Preferences" table="Preferences">
<key column="userId"></key>
<index column="preferenceName" type="String" />
<element type="ObjectAsStringUserType, Assembly">
<column name="preferenceValue" />
<column name="preferenceValueType"/>
</element>
</map>
Tôi không chắc chắn làm thế nào bạn sẽ lập bản đồ này trong thành thạo NHibernate.
Có thể có cách tốt hơn để làm điều này, hoặc có lẽ tôi chỉ nên hút nó lên và sử dụng IDictionary < chuỗi, chuỗi >. Bất kỳ ý tưởng?
Bạn có tìm thấy giải pháp không? –
Cảm ơn, chỉ những gì tôi đang tìm kiếm – jolySoft