C# 在使用SmoothHabanero时,如何强制关系成为强制关系

C# 在使用SmoothHabanero时,如何强制关系成为强制关系,c#,orm,habanero,C#,Orm,Habanero,我目前正在从事一个项目,并选择使用哈巴内罗作为我的ORM。我正在使用SmoothHabanero设置我的业务对象。我与另一个类有关系,该类至少需要一个对象实例才能有效。我该怎么做呢?好的,这可能有点详细,所以让我从一些基础知识开始 Smooth是habanero ORM的代码优先社区项目。Smooth基于约定优于配置的方法 您的Habanero域对象不需要具有外键属性,就可以正确映射到数据库,前提是您遵循Smooth能够理解的某种约定 典型的 public class Customer : Bu

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

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

Smooth是habanero ORM的代码优先社区项目。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); }
    }
}
公共类客户:BusinessObject
{
}
公共类SalesOrder:BusinessObject
{
/// 
///此销售订单所针对的类型。
/// 
公共虚拟客户
{
获取{returnrelations.GetRelatedObject(“客户”);}
set{Relationships.SetRelatedObject(“客户”,值);}
}
}
在这种情况下,销售订单与客户具有单一关系。 客户在销售订单上是强制性的,即在未设置客户的情况下,销售订单无法持久化

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

现在来回答你的问题

如果类是根据上述定义的,那么您只需添加“[AutompCompulsory]”属性,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); }
    }
}
公共类客户:BusinessObject
{
}
公共类SalesOrder:BusinessObject
{
/// 
///此销售订单所针对的类型。
/// 
[汽车发动机]
公共虚拟客户
{
获取{returnrelations.GetRelatedObject(“客户”);}
set{Relationships.SetRelatedObject(“客户”,值);}
}
}
希望这有帮助
布雷特

@brett-谢谢,这正是我想要的。