में मुझे स्ट्रिंग संग्रह का चयन करने में समस्या है और इसे निम्न छोटे उदाहरण के साथ पुन: उत्पन्न किया गया है।लिंकक का उपयोग कर स्ट्रिंग संग्रह पर एनएचबर्ननेट क्वेरीिंग या तो त्रुटि या खाली संग्रह
को देखते हुए निम्नलिखित एसक्यूएल:
CREATE TABLE [Post] (
[Id] INT IDENTITY NOT NULL,
[Name] NVARCHAR(20) NOT NULL,
CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED ([Id])
)
CREATE TABLE [Category] (
[Id] INT IDENTITY NOT NULL,
[PostId] INT NOT NULL,
[Name] NVARCHAR(20) NOT NULL,
CONSTRAINT [FK_Category_Post] FOREIGN KEY ([PostId]) REFERENCES [Post]([Id])
)
INSERT INTO [Post] ([Name]) VALUES ('Post 1')
INSERT INTO [Category] ([PostId], [Name]) VALUES (1, 'Alpha')
और कोड (मैं LINQPad प्रयुक्त):
void Main()
{
using (var sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.Dialect<MsSql2012Dialect>().ConnectionString(@"Data Source=(localdb)\Projects;Initial Catalog=NhTest;"))
.Mappings(x => {
x.FluentMappings.Add(typeof(PostMap));
})
.BuildSessionFactory())
using (var session = sessionFactory.OpenSession())
{
var post = session.Get<Post>(1);
Debug.Assert(post.Categories.First() == "Alpha");
try {
var second = session.Query<Post>()
.Where(x => x.Id == 1)
.Select(x => new {
x.Categories,
x.Name,
})
.Single();
}
catch (Exception ex) {
Debug.Fail(ex.ToString());
}
var third = session.Query<Post>()
.Where(x => x.Id == 1)
.Select(x => new {
x.Categories,
x.Name,
})
.ToList().First();
Debug.Assert(third.Categories.Count() == 1, "Category count was " + third.Categories.Count());
}
}
// Define other methods and classes here
class Post
{
public virtual int Id { get; protected set; }
public virtual string Name { get; protected set; }
public virtual IList<string> Categories { get; protected set; }
}
class PostMap : ClassMap<Post>
{
public PostMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Categories)
.Table("Category")
.Element("Name")
.KeyColumn("PostId");
}
}
पहले ज़ोर गुजरता है और इस, मेरे मन में, पर श्रेणियों में से मेरी मानचित्रण सत्यापित करता है पोस्ट।
कोशिश ब्लॉक में क्वेरी एक अपवाद
'System.Linq.EnumerableQuery`1[System.Collections.Generic.IList`1[System.String]]' cannot be converted to type 'System.Linq.IQueryable`1[System.Object[]]
तो मैं यह आप कोड में देख 3 प्रयास, .ToList().First()
बुला लिए बदल दिया है फेंकता है। यह क्वेरी कोई अपवाद नहीं फेंकती है लेकिन श्रेणियों की सूची खाली हो जाती है।
क्या मैं कुछ गलत कर रहा हूं? क्या यहां उपयोग करने के लिए एक बेहतर मैपिंग तकनीक है? या क्या मेरी क्वेरी काम करने के लिए कामकाज हैं?
मैं वास्तव में मेरे डोमेन बेहतर सूट स्ट्रिंग की एक सूची होने के रूप में एक नया श्रेणी वर्ग बनाने से बचना चाहते थे। मैंने QueryOver के साथ यह भी कोशिश की है और एक ही त्रुटि प्राप्त करें। – Matt