tôi muốn làm chính xác những gì câu hỏi này hỏi: Cascade Saves with Fluent NHibernate AutoMappingLưu lại thác với chế độ tự động chụp liên tục NHibernate - Câu trả lời cũ vẫn hợp lệ?
Sử dụng thành thạo NHibernate Mappings bật "cascade" trên toàn cầu một lần cho tất cả các lớp học và các loại mối quan hệ bằng một cuộc gọi chứ không phải thiết lập nó cho mỗi bản đồ riêng biệt.
Câu trả lời cho câu hỏi trước trông rất tuyệt, nhưng tôi sợ rằng Fluent Nhibernate API đã thay đổi cú pháp .WithConvention vào năm ngoái và đã phá vỡ câu trả lời ... hoặc là tôi đang thiếu thứ gì đó.
tôi tiếp tục nhận được một loạt các không gian tên không tìm thấy sai sót liên quan đến IOneToOnePart, IManyToOnePart và tất cả các biến thể của họ:
"Loại hoặc namespace tên 'IOneToOnePart' không thể tìm được (là bạn thiếu một chỉ thị sử dụng hoặc một tham chiếu lắp ráp?) "
Tôi đã thử dll ví dụ chính thức, dll RTM và bản mới nhất và không ai trong số họ dường như làm VS 2008 xem không gian tên được yêu cầu.
Vấn đề thứ hai là tôi muốn sử dụng lớp với AutoPersistenceModel tôi nhưng tôi không chắc chắn nơi để dòng này: .ConventionDiscovery.AddFromAssemblyOf() trong phương pháp tạo nhà máy của tôi.
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(DbFile))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<Shelf>(type => type.Namespace.EndsWith("Entities"))
.Override<Shelf>(map =>
{
map.HasManyToMany(x => x.Products).Cascade.All();
})
)
)//emd mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();//finalizes the whole thing to send back.
}
Dưới đây là những điều khoản về lớp và sử dụng Tôi đang cố gắng
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FluentNHibernate.Conventions;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using FluentNHibernate.Mapping;
namespace TestCode
{
public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public bool Accept(IOneToOnePart target)
{
return true;
}
public void Apply(IOneToOnePart target)
{
target.Cascade.All();
}
public bool Accept(IOneToManyPart target)
{
return true;
}
public void Apply(IOneToManyPart target)
{
target.Cascade.All();
}
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.Cascade.All();
}
}
}
Cảm ơn tom. Đó là một giải pháp thực sự dễ dàng. Chắc chắn ít mã hơn con đường của tôi :-) – Glenn
Vui vì bạn thích nó - tôi chắc chắn đã làm khi họ đã được chỉ ra cho tôi trên danh sách gửi thư! Tôi đã thực hiện một chỉnh sửa lớn trên phần Wiki http://wiki.fluentnhibernate.org/Conventions để mang lại sự chú ý của nhiều người hơn bằng cách sử dụng FNH. –