NHibernate: назначить внешний ключ - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь назначить внешний ключ, но получаю ошибку. Вот мой код:

public class User : Entity
{
    public User()
    {
        WebSite = new List<WebSite>();
    }

    public virtual string Name { get; set; }
    public virtual IList<WebSite> WebSite { get; set; }

    public virtual void AddWebSite(WebSite ws)
    {
        ws.User = this;
        WebSite.Add(ws);
    }
}


public class WebSite : Entity
{
    public WebSite()
    {
        Setup();
    }

    public WebSite(string Url)
    {
        DomainUrl = Url;
        Setup();
    }

    private void Setup()
    {
        WebPage = new List<WebPage>();
        User = new User();
    }

    public virtual string DomainUrl { get; set; }
    public virtual bool IsApproved { get; set; }
    public virtual User User { get; set; }

    public virtual IList<WebPage> WebPage { get; set; }
}


public class WebSiteMap : ClassMap<WebSite>
{
    public WebSiteMap()
    {
        Id(x => x.Id).Not.Nullable();
        Map(x => x.DomainUrl).Length(3000).Not.Nullable();
        Map(x => x.IsApproved).Not.Nullable();
        References(x => x.User).Column("UserId").Nullable();
        HasMany(x => x.WebPage).AsBag().Inverse();
    }
}


public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.Id).Not.Nullable().GeneratedBy.Assigned();
        Map(x => x.Name).Not.Nullable().Length(2000);
        HasMany(x => x.WebSite).Inverse().AsBag();
    }
}


Uri u = new Uri("http://yahoo.com");
WebSite ws = new WebSite(u.Host);
ws.IsApproved = true;

var CurrentSession = MvcApplication10.MvcApplication.SessionFactory;
using (var session = CurrentSession.OpenSession())
{
     using (var tx = session.BeginTransaction())
     {
          session.Save(ws);
          tx.Commit();
     }
}

Пользователь является родителем веб-сайтов. У пользователя может быть много сайтов. В коде я пытаюсь вставить сайт без пользователя. Таким образом, внешний ключ пользователя может быть пустым.

Когда я запускаю код, я получаю эту ошибку:

не удалось обновить: [TheSite.WebSite # 23] [SQL: UPDATE WebSite SET DomainUrl =?, IsApproved =?, UserId =? ГДЕ Id =?]

А вот и странная вещь

Когда я беру вкладыш вне транзакции, он работает. Вот код, который я использовал, чтобы сделать эту работу

 using (var session = CurrentSession.OpenSession())
 {
      session.Save(ws);
      using (var tx = session.BeginTransaction())
      {   
            //tx.Commit();
      }
  }

Я взял сессию. Сохраните (ws) из транзакции, затем она заработала. Почему это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...