小编ebb*_*ebb的帖子

流利的NHibernate +禁用LazyLoad

嘿那里,我试图在没有运气的情况下禁用我的收藏品上的LazyLoad ...到目前为止我尝试过的代码是:

// Person.cs

public class Person
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual IList<Car> Cars { get; set; }

    public Person()
    {
        Cars = new List<Car>();
    }

    public virtual void AddCar(Car car)
    {
        Cars.Add(car);
    }
}

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id);
        Map(x => x.FirstName);
        HasMany(x => x.Cars).KeyColumn("PersonId").Cascade.AllDeleteOrphan().Not.LazyLoad();
        Table("Persons");
    }
}
Run Code Online (Sandbox Code Playgroud)

// Car.cs

public class Car
{
    public virtual int …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate lazy-loading fluent-nhibernate

3
推荐指数
1
解决办法
1万
查看次数

WCF> Web服务:basicHttpBinding与netTcpBinding

当我遇到以下问题时,我正在尝试理解WCF的基本知识:

为什么使用basicHttpBindingnetTcpBinding的网络服务?

它们都可以有一个mex端点,允许您通过" 添加服务器参考"窗口轻松添加它们,而不需要任何配置?

我知道HTTP协议是建立在协议之上的TCP,但对我而言,它看起来就像HTTP提供了许多不必要的样板(性能等)

任何人都可以澄清为什么你会选择一个而不是另一个网络服务?

wcf web-services tcp http

3
推荐指数
1
解决办法
7357
查看次数

Stack - 为valuetypes存储的值在哪里?

void main()
{
    int x = 5; // stack-allocated
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

我知道这x是堆栈分配的.但是实际存储在堆栈中的是x什么?它是否具有"实际值",或者包含值的内存中的某个地址?

c# stack memory-management

3
推荐指数
1
解决办法
253
查看次数

多线程单生产者多个消费者实施

我想用单个生产者和多个消费者的模式实现多文件下载.

我有: - 找到要在循环中下载的新链接的代码 - 当找到新链接时 - 它调用下载功能 - 下载功能接受源文件路径和目标文件路径并下载文件.

我想做什么 - 我想同时下载X个文件(我不知道文件的总数) - 在任何时候我都应该能够同时下载X文件 - 只要1个X文件完成下载 - 调用函数应该能够立即添加新的下载 - 然后立即下载

  • 所以我有一个生产者函数,不断添加新的下载到队列(在任何时候最大X下载)
  • 多个X线程,它消耗下载并单独开始下载.一旦完成下载 - 生产者应该能够添加新的下载 - 这将产生新的线程.

举例非常感谢

c# queue multithreading producer-consumer

3
推荐指数
1
解决办法
5380
查看次数

C#-接口拆分?

我有一个与其他类具有不同Add方法的类,因此不能实现相同的接口...我应该拆分当前接口以便它也可以使用它,还是应该为其创建另一个接口?

更新:

public interface IProductRepository<T, T2>
    where T : class
    where T2 : class
{
    void Add(T model, int categoryId);
    void Edit(T model, int id);
    void Delete(int id);

    T2 Get(int id);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,上面的接口具有一个需要categoryId的Add方法。

我的Category类与上面相同,但是Add方法中没有categoryId参数。我应该为Category类创建一个新接口吗?

c# interface

2
推荐指数
1
解决办法
639
查看次数

C#+代码合同 - 抛出异常

更新 - 由于我方缺乏解释,我改写了帖子.

您如何看待使用代码约定在无效输入上抛出异常?(我正在编写我的服务合同,要求UserName不为null或包含空格)

MembershipServiceContracts.cs - 位于子文件夹的服务层中

[ContractClassFor(typeof (IMemberShipService))]
internal abstract class MemberShipServiceContracts : IMemberShipService
{
    #region IMemberShipService Members

    public MembershipCreateStatus CreateUser(string userName, string password, string email)
    {
        Contract.Requires(!String.IsNullOrWhiteSpace(userName), "Test");
        Contract.Requires(!String.IsNullOrWhiteSpace(password));
        Contract.Requires(!String.IsNullOrWhiteSpace(email));

        return default(MembershipCreateStatus);
    }

    #endregion

}
Run Code Online (Sandbox Code Playgroud)

MembershipService.cs - 位于我的服务层

[ContractClass(typeof (MemberShipServiceContracts))]
public interface IMemberShipService
{
    MembershipCreateStatus CreateUser(string userName, string password, string email);
}

public class MemberShipService : IMemberShipService
{
    private readonly MembershipProvider _provider;

    public MemberShipService()
        : this(null)
    { }

    public MemberShipService(MembershipProvider provider)
    {
        _provider = provider ?? Membership.Provider;
    } …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling exception code-contracts

2
推荐指数
1
解决办法
3830
查看次数

ASP.NET MVC - 使用UnitOfWork

我目前正在开发一个由6层组成的网络应用程序:

  • Web(对ViewModels和Controllers的引用)
  • 的ViewModels
  • 控制器
  • 服务(参考数据和实体)
  • 数据(参考实体)
  • 实体

我正在尝试实现一个"UnitOfWork"模式,因此我有一个由DI为该作业注入的类,这使得在我完成时可以在控制器的actionresult中执行.commit()数据库.

现在是我的问题......这个UnitOfWork课程应该放在哪里?它现在在我的数据层中,但是需要Controller层引用数据层和服务层,这在我看来很奇怪......我应该将UnitOfWork类/接口移动到服务层并使用DI吗?

asp.net asp.net-mvc separation-of-concerns unitofworkapplication

2
推荐指数
1
解决办法
738
查看次数

F# - 破碎的"然后"

我正在尝试制作一个非常简单的应用程序,它会根据一天中的时间来迎接.我的代码是:

open System

let read() = Console.Read() 
let readLine() = Console.ReadLine()

let clockMsg min max todo = 
    if (DateTime.Now.Hour > min) && (DateTime.Now.Hour < max) then todo

let name = readLine()

clockMsg 0 8 <| printfn "Go to bed, %s!" name
clockMsg 8 12 <| printfn "Good morning, %s!" name
clockMsg 12 18 <| printfn "Good afternoon, %s!" name

read() |> ignore
Run Code Online (Sandbox Code Playgroud)

现在是我的问题,如何只有一个函数调用有效,但三个都无论如何,打印他们的消息?

f#

2
推荐指数
1
解决办法
162
查看次数

F# - 反向管道订单

我怎么能这样做:

let printTeams x : unit = 
    let rnd = new Random()
    Seq.toList x |> List.sortBy (fun x -> rnd.Next()) |> printTeams'
Run Code Online (Sandbox Code Playgroud)

但不是:

let printTeams x : unit = 
    let rnd = new Random()
    printTeamsRec'  <| Seq.toList x <| List.sortBy(fun x -> rnd.Next())
Run Code Online (Sandbox Code Playgroud)

我刚刚在最后一个上面收到错误,其中说:

类型不匹配.期待一个字符串列表 - >'a - >'b但给出一个
字符串列表 - > unit类型'' - >'b'与类型'unit'不匹配

错误发生在第三行 printTeamsRec'

任何帮助将是欣赏.

f#

2
推荐指数
1
解决办法
446
查看次数

递归同步比递归异步更快

为什么这Solution 2比效率更高Solution 1

(时间是100次运行的平均值,他们经历的总文件夹数是13217)

// Solution 1 (2608,9ms)
let rec folderCollector path =
  async { let! dirs = Directory.AsyncGetDirectories path 
          do! [for z in dirs -> folderCollector z] 
              |> Async.Parallel |> Async.Ignore }

// Solution 2 (2510,9ms)
let rec folderCollector path =
  let dirs = Directory.GetDirectories path 
  for z in dirs do folderCollector z
Run Code Online (Sandbox Code Playgroud)

我本以为Solution 1会更快,因为它是异步的,我在并行运行它.我错过了什么?

f#

2
推荐指数
1
解决办法
977
查看次数