Tag: castle activerecord

建议使用Castle ActiveRecord插入许多行并忽略任何欺骗行

我有一个webmethod,它将一堆食谱插入到数据库的队列中(以存储用户有兴趣烹饪的食谱,类似于NetFlix的电影队列)。 用户可以立即检查一堆食谱并排队。 我有类似这样的代码: [WebMethod] public void EnqueueRecipes(SecurityCredentials credentials, Guid[] recipeIds) { DB.User user = new DB.User(credentials); using (new TransactionScope(OnDispose.Commit)) { foreach (Guid rid in recipeIds) { DB.QueuedRecipe qr = new DB.QueuedRecipe(Guid.NewGuid(), user, new DB.Recipe(rid)); qr.Create(); } } } 我对UserId / RecipeId有一个独特的约束,因此用户只能将配方排入一次。 但是,如果他们碰巧选择了已经在队列中的配方,我真的不想用错误消息打扰用户,我只想忽略该配方。 如果违反了唯一约束,上面的代码将抛出SQLexception。 解决这个问题的最佳方法是什么,只需忽略重复的行。 我目前的想法是: 1)首先从数据库加载用户的整个队列,然后首先检查该列表。 如果配方已存在,只需continue执行for循环。 优点:没有不必要的SQL插入发送到数据库。 缺点:较慢,特别是如果用户有一个大队列。 2)不要使用ActiveRecord,而是将整个recipeIds数组传递给SQL函数。 此函数将检查每行是否首先存在。 优点:潜在的速度,让SQL处理所有肮脏的工作。 缺点:打破ActiveRecord模式并需要新的DB代码,这通常难以维护并且实现成本更高。 3)每次循环后CreateAndFlush。 基本上,不要在单个事务中运行整个循环。 […]

如何使用Castle ActiveRecord在保存或更新期间自动填充字段

问题:我们数据库中的所有表都有CreatedDate,CreatedBy,ChangedDate,ChangedBy字段,我希望在保存/更新ActiveRecord实体时自动设置这些字段。 我的第一次尝试是覆盖Save()和Update()方法。 但是,当我在实体上执行直接Save()或Update()时,只会调用这些方法。 它们不是在Master – Detail场景中调用的,我只在master上调用Save()。 接下来尝试的是OnSave()和OnUpdate()方法,但是这些字段中的更改未在数据库中保留。 最后我尝试了BeforeSave()方法。 但更新时不会调用此方法。 问题:如何在Save()或Update()期间自动设置这些CreatedDate,CreatedBy,ChangedDate,ChangedBy字段?

C#Castle ActiveRecord:如何优雅地(XML)序列化ActiveRecord对象?

我很难找到有关如何优雅地序列化ActiveRecord对象的信息。 我们希望使用XML作为格式,因为我们需要输出我们的对象,使得另一个程序能够可行地解析它们。 XML-Serialization通常很容易实现,但是在尝试序列化从ActiveRecord数据库返回的对象时会出现问题。 数据库返回对象的代理类,其类型不能通过[XmlInclude]属性明确预期。 例如: public class Foo : ActiveRecordLinqBase { public virtual string Bar{get;set;} public virtual int FooId{get;set;} public Foo(string bar) { Bar = bar; } public static void FooSerializeExample() { Foo tehFoozor = new Foo(“omgFoo!”); tehFoozor.SaveAndFlush(); int id = tehFoozor.FooId; //… //Assume new ActiveRecord session. XmlSerializer serializer = new XmlSerializer(typeof(Foo)); Foo tehFoozorToSerialize = […]

使用HqlBasedQuery参数化HQL IN子句?

你如何传递Nhibernate HQL中’in’子句的列表? 例如 // data input from the user interface, not known at compile time object[] productIds = {1, 17, 36, … }; string hqlQuery = @” from Product as prod where prod.Id in ( ? )”; HqlBasedQuery query = new HqlBasedQuery(typeof(Product), hqlQuery, productIds) ActiveRecordMediator.ExecuteQuery(query); 现在,这不会起作用,就像我希望的那样! 我真的坚持做这样的事情: // data input from the user interface, not […]

如何使用Linq与Castle ActiveRecord

我正在玩Castle ActiveRecord并注意到下载包含文件Castle.ActiveRecord.Linq.dll 。 我没有找到任何使用Linq和ActiveRecord的文档,只有一些 旧 博客文章 。 使用模式是什么? Castle.ActiveRecord.Linq是否Castle.ActiveRecord.Linq准备好投入生产?