2

我目前正在做一个项目,并选择使用 Habanero 作为我的 ORM。我正在使用 SmoothHabanero 来设置我的业务对象。我与另一个需要至少一个对象实例才能有效的类有关系。我该怎么做?

4

1 回答 1

1

好的,这可能有点详细,所以让我从一些基础知识开始。

Smooth 是 habanero ORM 的 Code First 社区项目。Smooth 基于约定优于配置的方法。

您的 Habanero 域对象不需要具有外键属性即可正确映射到数据库,前提是您遵循 Smooth 可以理解的某种约定。

通常

public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{
    /// <summary>
    /// The type this SalesOrder is for.
    /// </summary>
    public virtual Customer Customer
    {
        get { return Relationships.GetRelatedObject<Customer>("Customer"); }
        set { Relationships.SetRelatedObject("Customer", value); }
    }
}

在这种情况下,销售订单与客户具有单一关系。客户在销售订单上是强制性的,即销售订单在没有设置客户的情况下无法保留。

在域级别上,这一切都是有道理的。然而,在数据库级别,客户关系是使用 SalesOrder 表上的外键映射的。如果您遵循 CustomerID 是 SalesOrder 表上的外键属性的约定,那么这就是您在域模型中设置关系并正确映射到数据库所要做的一切。

现在回答你的问题。

如果类是按照上述定义的,那么您需要做的就是添加“[AutoMapCompulsory]”属性,Smooth 将强制执行所有必要的关系设置及其外键。

    public class Customer : BusinessObject
{
}
public class SalesOrder : BusinessObject
{

    /// <summary>
    /// The type this SalesOrder is for.
    /// </summary>
    [AutoMapCompulsory]
    public virtual Customer Customer
    {
        get { return Relationships.GetRelatedObject<Customer>("Customer"); }
        set { Relationships.SetRelatedObject("Customer", value); }
    }
}

希望这有助于布雷特

于 2011-04-18T10:59:57.760 回答