Смотри, у меня есть эти довольно простые модели Master-Detail:
Рука - мастер пальцев (палец - деталь руки)
Так на стороне клиента:
Hand hand = domainService.Hands[0]; // get some hand, doesn't matter
...
Finger f = new Finger() { f.Id = Guid.NewId() };
f.Hand = hand; // make connection !!
domainService.Fingers.Add(f);
domainService.SubmitChanges(OnSubmitCompleted, null); // error is here
На стороне сервера:
public void Insert<T>(T obj)
{
try
{
using (ISession session = _factory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.SaveOrUpdate(obj); // NHibernate error: not-null property references a null or transient value
transaction.Commit();
}
}
catch (Exception ex)
{
throw ;
}
}
Проблема в действительности заключается в том, чтобы не отправлять ассоциации обратно через провод WCF. Поэтому на стороне сервера свойство Hand имеет значение NULL, но не должно (нарушение) - я просто хочу обновить свой finger.Hand свойство
Это даже не композиция - мне не нужна эта причина ее ограничений
вот класс metaAttribute:
[MetadataType(typeof(Finger.FingerMetadata))]
public partial class Finger
{
//[Required(AllowEmptyStrings = true)]
//[Exclude]
public virtual Guid HandID { get; set; }
//{
// get { return Hand.Id; }
//}
internal sealed class FingerMetadata
{
[Key]
public Guid Id { get; set; }
[Include]
//[RoundtripOriginal]
//[ExternalReference]
[Association("Finger-Hand", "HandID", "Id")]
//[ConcurrencyCheck]
//[Composition]
public Hand Hand { get; set; }
}
}
[MetadataType(typeof(Hand.HandMetadata))]
public partial class Hand
{
internal sealed class HandMetadata
{
[Key]
public Guid Id { get; set; }
[Include]
//[ExternalReference]
[Association("Hand-Finger", "Id", "HandID")]
//[Composition]
public IList<Finger> Fingers { get; set; }
}
}
Я видел ту же проблему здесь http://forums.silverlight.net/forums/p/205220/480824.aspx, но никто не знает ..
Пожалуйста, помогите!
Спасибо!