我想用流利NHibernate建模一个简单的1:n关系:
有人员和项目。一个人拥有零到无限的物品,而一个物品属于一个人。为一个1:n关系生成两个关系列
我的数据类:
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Item> Items { get; set; }
}
public class Item
{
public virtual int Id { get; set; }
public virtual Person Owner { get; set; }
}
和映射:当我尝试创建一个使用NHibernate的SchemaExport
类数据库架构
public sealed class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x => x.Id);
References(x => x.Owner);
}
}
public sealed class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Items).Inverse();
}
}
我的问题就出现了。
项目表实得两列引用Person表:
create table [Item] (
Id INT IDENTITY NOT NULL,
Owner_id INT null,
Person_id INT null,
primary key (Id)
)
这是为什么?
一列应该就足够了 - 据我所知,拨打Inverse
应该抑制第二列 - 但事实并非如此。
我在做什么错?
谢谢 - 有没有这“神奇字符串”适用于任何替代不变? – Matthias
@ winSharp93“魔术串”并不是你所想象的。但如果你想要使用'const' –
使用“Magic String”我的意思是代码中的字符串常量,因为它引用了代码的另一部分,所以很容易被忘记更改(在这种情况下,String的值取决于Name “所有者”财产)。因此,引入一个常数不会改变太多恕我直言。根据你的定义什么是“魔术串”?或者你认为我认为这是一个魔术字符串是什么? ;-) 那么通常认为最好的做法是一般指定映射文件中的所有列名称呢? – Matthias