gpt4 book ai didi

c# - NHibernate 中的映射问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:36 24 4
gpt4 key购买 nike

我有以下类(class):

public class Customer
{
public virtual int CustomerID { get; protected set; }
public virtual string AccountNumber { get; protected set; }
public virtual string CustomerType { get; set; }
public virtual int TerritoryID { get; set; }
public virtual SalesTerritory Territory { get; protected set; }
}

它正在使用 Fluent NHibernate 进行映射,如下所示:

    public class CustomerMapper : ClassMap<Customer>
{
private const string schema = "Sales";
public CustomerMapper()
{
SchemaIs(schema);
Id(x => x.CustomerID);
Map(x => x.CustomerType).WithLengthOf(1).Not.Nullable();
Map(x => x.TerritoryID).Not.Nullable();

Map(x => x.AccountNumber).ReadOnly()
.Update(false)
.Insert(false)
.Generated(Generated.Insert);

References<SalesTerritory>(x => x.Territory).TheColumnNameIs(ReflectionHelper.GetProperty<Customer>(x => x.TerritoryID).Name).LazyLoad().Update(false).Insert(false);
}
}

更新和插入方法只是设置属性的更新插入 属性的扩展方法在生成的映射文件中。

这是生成的映射文件的样子:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" assembly="Model" namespace="Model" schema="Sales">
<class name="Customer" table="`Customer`" xmlns="urn:nhibernate-mapping-2.2">
<id name="CustomerID" column="CustomerID" type="Int32">
<generator class="identity" />
</id>
<property name="AccountNumber" column="AccountNumber" insert="false" update="false" generated="insert" length="100" type="String">
<column name="AccountNumber" />
</property>
<property name="TerritoryID" column="TerritoryID" not-null="true" type="Int32">
<column name="TerritoryID" />
</property>
<property name="CustomerType" column="CustomerType" not-null="true" length="1" type="String">
<column name="CustomerType" />
</property>
<many-to-one lazy="proxy" update="false" insert="false" name="Territory" column="TerritoryID" />
</class>
</hibernate-mapping>

我的问题是,当将新客户实例保存到数据库中时,客户实例的 Territory 属性为空。
保存到数据库后如何使此属性包含正确的值?我正在查看类似于 generated 属性的属性,这些属性在刷新 session 后检索正确的值。
还是我的 Customer 类有问题?
提前致谢。

编辑 1:我用于此模型的数据库是 AdventureWorks (SQL2005),表 Sales.Customer 和 Sales.SalesTerritory。

最佳答案

一个更合理的映射应该是这样的:

public class CustomerMapper : ClassMap<Customer>
{
private const string schema = "Sales";
public CustomerMapper()
{
SchemaIs(schema);
Id(x => x.CustomerID);
Map(x => x.CustomerType).WithLengthOf(1).Not.Nullable();
Map(x => x.AccountNumber).ReadOnly()
.Generated(Generated.Insert);
References(x => x.Territory).LazyLoad();
}
}

几点:

  • 这算作映射的 SalesTerritory 类。
  • TerritoryID 不是必需的。
  • 如果您使用 Insert(false) 和 Update(false),这些属性将不会保存到数据库中。 ReadOnly() 同时执行 Insert(false) 和 Update(false)。
  • CostumerType 完全可以是一个枚举。

这或多或少就是这个想法(空气代码)。

关于c# - NHibernate 中的映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com