Я пытаюсь назначить внешний ключ, но получаю ошибку. Вот мой код:
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) из транзакции, затем она заработала. Почему это?