C# 使用NHibernate或linqtosql是否可以实现这一点?

C# 使用NHibernate或linqtosql是否可以实现这一点?,c#,sql-server,nhibernate,linq-to-sql,parse-platform,C#,Sql Server,Nhibernate,Linq To Sql,Parse Platform,是否可以仅通过使用模型上的属性,使用Linq到SQL或NHibernate在类和数据库之间进行ORM映射 例如:如果使用Parse.com作为后端,则在DB和类之间建立关系非常简单: [ParseClassName("itemsForSale")] //Name of the table public class Item : ParseObject { [ParseFieldName("userId")] //Name of the column

是否可以仅通过使用模型上的属性,使用Linq到SQL或NHibernate在类和数据库之间进行ORM映射

例如:如果使用Parse.com作为后端,则在DB和类之间建立关系非常简单:

[ParseClassName("itemsForSale")] //Name of the table
public class Item : ParseObject
{
            [ParseFieldName("userId")] //Name of the column
            public string UserId
            {
                get { return GetProperty<string>(); }
                set { SetProperty<string>(value); } 
            }
}
[ParseClassName(“itemsForSale”)]//表的名称
公共类项:ParseObject
{
[ParseFieldName(“userId”)]//列的名称
公共字符串用户ID
{
获取{return GetProperty();}
集合{SetProperty(value);}
}
}
不需要其他任何东西。没有映射文件,没有设计器文件。 我想知道,如果我必须使用SQL server替换解析后端,我是否能够实现类似的功能


LINQtoSQL和NHibernate似乎需要配置文件才能工作。还有什么我可以使用的吗?

在我们公司的大多数项目中,我们使用Linq to SQL只用于支持Linq的数据库视图查询,我们只使用属性将它们的行映射到类。我们使用ColumnAttribute和TableAttribute来表示视图名(表名)及其列名。更多信息:

这样,我们在视图结果类中不使用外部映射机制,而是使用属性

我们还经常将NHibernate与属性映射一起使用。我们使用FluentNhibernate设置约定,并且不使用映射类。只是约定和属性

下面是返回设置了所有约定的NHibernate配置对象的代码

return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012.ConnectionString(c => c.FromConnectionStringWithKey(Stale.NazwaPolaczeniaERP)).DefaultSchema("dbo"))
.Mappings(m =>
{
    var model = AutoMap.Assemblies(new AutomappingConfiguration(),
    new Assembly[]
    {
        typeof(ERP.DomenaERP.ZnacznikZasobu).Assembly
    });

    model.Conventions.Add(new SetEnumTypeConvention());
    model.Conventions.Add(new ColumnConvention());
    model.Conventions.Add(new CollectionAccessConvention());
    model.Conventions.Add(new OptimisticLockIgnoreConvention());
    model.Conventions.Add(new SqlTimestampConvention());
    model.Conventions.Add(new SetTableNameConvention());
    model.Conventions.Add(new VersionConvention());
    model.Conventions.Add(new HasManyConvention());
    model.Conventions.Add(new InheritanceConvention());
    model.Conventions.Add(new ColumnNameConvention());

    model.Conventions.Add(DefaultLazy.Always());
    m.AutoMappings.Add(model);
})
IMO这个主题太高级,用户场景太特殊,无法在单个答案中详细阐述。我将为您列出一些可能对您试图实现的目标有用的类

AutomappingConfiguration-这是FluentNhibernate.Automapping.DefaultAutomappingConfiguration类之后继承的类,它可以帮助NHibernate猜测哪些类映射为实体,哪些属性应该映射(您可能会感兴趣的ShouldMap、IsVersion、IsComponent、IsCollection方法)

你可以看到我们使用了很多“model.Conventions.Add”方法。我们实例化并将约定实例添加到NHibernate配置中。它们从FluentNhibernate.convention命名空间实现NHibernate,如:IPropertyConvention、IRereferenceConvention、IHasManyConvention、ICollectionConvention等

您可以在此处了解有关FluentNHibernate约定自动映射的更多信息:


正如我所说,自动映射是一个非常大且非常个性化的主题,但我希望我能够为您展示一种方法。

我想您需要创建自定义属性。希望对您有所帮助我对Parse.com一无所知,但从您的示例来看,它不仅仅是属性。您似乎必须从特定的基类派生实体,这意味着它非常特定于实现,基类可能是完成大部分工作的对象,而不是属性。@ErikFunkenbusch:某种程度上是的。需要从ParseObject派生,才能使GetProperty()之类的东西正常工作。但是,实际的映射仅使用属性完成。