Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储没有显式ID的简单关系_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 存储没有显式ID的简单关系

C# 存储没有显式ID的简单关系,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,所以,我有两个表,称它们为User和Item。我希望每个用户都能够标记(比如谷歌世界中的“凝视”事物)任何项目 现在,从集合论的角度来看,将其存储为用户和项目之间的简单关系应该是合理的。调用这个新表UserItemFlags。该表应该有两列;一个具有用户表的外键,另一个具有项目表的外键。如果用户U标记项I,那么这将由useritemlagas表中的行(U,I)表示 现在,我用Fluent NHibernate表达这个的问题是:我似乎不明白如何处理Id映射。理想情况下,我将没有ID,因为除了用户和

所以,我有两个表,称它们为User和Item。我希望每个用户都能够标记(比如谷歌世界中的“凝视”事物)任何项目

现在,从集合论的角度来看,将其存储为用户和项目之间的简单关系应该是合理的。调用这个新表UserItemFlags。该表应该有两列;一个具有用户表的外键,另一个具有项目表的外键。如果用户U标记项I,那么这将由useritemlagas表中的行
(U,I)
表示

现在,我用Fluent NHibernate表达这个的问题是:我似乎不明白如何处理
Id
映射。理想情况下,我将没有ID,因为除了用户和项目之间存在或不存在这种关系之外,再没有什么了。此模型的一个自然结果是,表中不可能有重复的行。这是一个理想的特性

using FluentNHibernate.Mapping;

public class UserItemFlagsMapping : ClassMap<UserItemFlags>
{
    public UserItemFlagsMapping()
    {
        // Aaaa! I must have an Id!
        References(x => x.User).Not.Nullable();
        References(x => x.Item).Not.Nullable();
    }
}
使用FluentNHibernate.Mapping;
公共类UserItemFlagsMapping:ClassMap
{
公共UserItemFlagsMapping()
{
//啊!我必须有身份证!
引用(x=>x.User).Not.Nullable();
引用(x=>x.Item).Not.Nullable();
}
}

我很乐意看到任何指向正确方向的指针,即使它们会要求我在这个特定情况下放弃Fluent。

我还没有使用Fluent NHibernate,但对于标准NHibernate,我通常不会像这样直接映射表

多对多表只是作为关系两侧的集合创建的。 因此,您将有:

User.Items和Item.Users

向集合中添加元素将在映射表UserItemFlags中创建行

另见:


大卫你没有身份证是什么意思?您有一个用户ID和项目ID的复合ID


编辑:答案如下:

Id()方法仅适用于单列主键。您希望改为使用CompositeId()。类似于以下内容:CompositeId().KeyReference(x=>x.User,“User_id”).KeyReference(x=>x.Item,“Item_id”;显然,如果使用默认约定映射,则不需要列名


啊,很公平。但是,我想避免在这些类中使用列表,因为它与我使用数据的方式根本不匹配:(是的,我同意。但是Fluent NHibernate不同意。我需要调用
ClassMap
上的
Id
-方法让Fluent理解它。Id()方法仅适用于单列主键。您希望改为使用CompositeId()。类似于以下内容:CompositeId().KeyReference(x=>x.User,“User\u id”).KeyReference(x=>x.Item,“Item\u id”;显然,如果使用默认约定映射,则不需要列名。