[英]Is it possible to use Linq-to-SQL with nhibernate envers?
[英]Is this possible using NHibernate or Linq to SQL?
是否可以仅通过使用模型上的属性使用Linq to SQL或NHibernate在类和数据库之间进行ORM映射?
例如:如果您使用Parse.com作为后端,那么在数据库和类之间建立关系就很简单:
[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); }
}
}
没有其他要求。 没有映射文件,没有设计器文件。 我想知道,如果必须使用SQL Server替换Parse后端,是否可以实现类似的功能?
Linq to SQL和NHibernate似乎需要配置文件才能工作。 还有其他我可以使用的东西吗?
在我们公司的大多数项目中,我们仅使用Linq to SQL来实现启用linq的数据库视图查询,并且仅使用属性将其行映射到类。 我们使用ColumnAttribute和TableAttribute来指示我们的视图名称(表名称)及其列名称。 更多信息: https : //msdn.microsoft.com/zh-cn/library/system.data.linq.mapping(v=vs.110).aspx
这样,我们不使用外部映射机制,而是在视图结果类中使用属性。
我们也经常将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.Conventions命名空间实现NHibernate,例如:IPropertyConvention,IReferenceConvention,IHasManyConvention,ICollectionConvention等。
您可以在此处了解有关FluentNHibernate自动映射的更多信息: https : //github.com/jagregory/fluent-nhibernate/wiki/Conventions 。
正如我所说,自动映射是一个很大且非常个人化的话题,但我希望我能向您展示一种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.