首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流畅的NHibernate单向关系导致许多更新

流畅的NHibernate单向关系导致许多更新
EN

Stack Overflow用户
提问于 2012-10-20 02:25:20
回答 1查看 196关注 0票数 0

我已经在StackOverflow和谷歌上做了一些搜索,但我仍然找不到为什么会发生这种情况,以及如何修复它。我是NHibernate和FluentNHibernate的新手,所以请温文点:)

在做一些集成测试时,我发现如果我只是修改卖家的名字,NHibernate会为所有联系人和登录名生成更新脚本,并删除Contact_Seller中的所有引用并读取它们。

我觉得我应该在我的映射中做一些类似Inverse()的事情,但是我不知道怎么做,因为Contact和Login在我的对象模型中没有对Sellers或Buyer的引用。

这是我的设置(对象、地图和数据库)。如果你需要更多信息,请告诉我,谢谢。

代码语言:javascript
运行
复制
class Buyer{
    public int BuyerID {get;set;}
    public Login Login {get;set;}
    public IList<Contact> Contacts  {get;set;}
    ... Other Buyer properties ...

}
class Seller{
    public int SellerID {get;set;}  
    public Login Login {get;set;}
    public IList<Contact> Contacts  {get;set;}
    public string Name {get;set;}
    ... Other Seller properties ...
}
class Login{
    public int LoginID {get;set;}
    public string Username {get;set;}
    public byte[] Password {get;set;}
    public string Email {get;set;}
}
class Contact{
    public int ContactID {get;set;}
    ... Contact Info...
}

public BuyerMap()
{    
    Id(x => x.BuyerID);

    ... Other Seller properties ...

    HasManyToMany(x => x.Contacts).Table("Contact_Buyer").Cascade.All();            
    References(x => x.Login).Cascade.All();

}

public SellerMap()
{    
    Id(x => x.SellerID);

    ... Other Seller properties ...

    HasManyToMany(x => x.Contacts).Table("Contact_Seller").Cascade.All();           
    References(x => x.Login).Cascade.All();

}
public LoginMap()
    {
        Id(x => x.LoginID);

        Map(x => x.Username);
        Map(x => x.Password);
        Map(x => x.Email);

    }

public ContactMap()
{
    Id(x => x.ContactID);

        ... Other Contact properties ...        

}

TABLE Buyer(
    [BuyerID] [int] IDENTITY(1,1) NOT NULL, 
    [LoginID] [int] NULL,
    ... Other Buyer fields ...
    )


TABLE Seller(
    [SellerID] [int] IDENTITY(1,1) NOT NULL,    
    [LoginID] [int] NOT NULL,
    [Name]     [varchar] NOT NULL,
    ... Other Seller fields ...
    )

TABLE Login(
    [LoginID] [int] IDENTITY(1,1) NOT NULL,     
    ... Other Login fields ...
    )

TABLE Contact(
    [ContactID] [int] IDENTITY(1,1) NOT NULL,   
    ... Other Contact fields ...
    )

TABLE Contact_Seller(
    [ContactID] [int] NOT NULL, 
    [SellerID]  [int] NOT NULL, 
    )

TABLE Contact_Buyer(
    [ContactID] [int] NOT NULL, 
    [BuyerID]  [int] NOT NULL,  
    )
EN

Stack Overflow用户

回答已采纳

发布于 2012-10-22 21:58:15

看一下这些映射,您对联系人的顺序不感兴趣,但我认为它们应该是唯一的。因此,将Contacts集合更改为ICollection<Contact>

代码语言:javascript
运行
复制
HasManyToMany(x => x.Contacts).AsSet();

NHibernate可以优化一些访问,因为它知道链接表包含唯一对。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12980246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档