2

外部キー プロパティ Product.CategoryId を Windows フォーム アプリケーションの Devexpess Lookupedit にデータバインドしたいと考えています。そう

        lookEditCategory.DataBindings
       .Add(new Binding("EditValue", Product, "CategoryId ", true,
        DataSourceUpdateMode.OnPropertyChanged));

        lookEditCategory.Properties.Columns.Clear();
        lookEditCategory.Properties.NullText = "";
        lookEditCategory.Properties.DataSource = CatCol;
        lookEditCategory.Properties.ValueMember = "CategoryId";
        lookEditCategory.Properties.DisplayMember = "CategoryName";
        var col = new LookUpColumnInfo("CategoryName") { Caption = "Type" };
        lookEditCategory.Properties.Columns.Add(col);

問題は、Nhibernate が外部キー Product.CategoryId を公開しないことです。代わりに、私のエンティティとマッピングは次のようになります

public partial class Product
{
public virtual int ProductId { get; set; }
[NotNull]
[Length(Max=40)]
public virtual string ProductName { get; set; }
public virtual bool Discontinued { get; set; }
public virtual System.Nullable<int> SupplierId { get; set; }

[Length(Max=20)]
public virtual string QuantityPerUnit { get; set; }
public virtual System.Nullable<decimal> UnitPrice { get; set; }
public virtual System.Nullable<short> UnitsInStock { get; set; }
public virtual System.Nullable<short> UnitsOnOrder { get; set; }
public virtual System.Nullable<short> ReorderLevel { get; set; }

private IList<OrderDetail> _orderDetails = new List<OrderDetail>();

public virtual IList<OrderDetail> OrderDetails
{
  get { return _orderDetails; }
  set { _orderDetails = value; }
}

public virtual Category Category { get; set; }

public class ProductMap : FluentNHibernate.Mapping.ClassMap<Product>
{
  public ProductMap()
  {
    Table("`Products`");
    Id(x => x.ProductId, "`ProductID`")
      .GeneratedBy
        .Identity();
    Map(x => x.ProductName, "`ProductName`")
;
    Map(x => x.Discontinued, "`Discontinued`")
;
    Map(x => x.SupplierId, "`SupplierID`")
;

    Map(x => x.QuantityPerUnit, "`QuantityPerUnit`")
;
    Map(x => x.UnitPrice, "`UnitPrice`")
;
    Map(x => x.UnitsInStock, "`UnitsInStock`")
;
    Map(x => x.UnitsOnOrder, "`UnitsOnOrder`")
;
    Map(x => x.ReorderLevel, "`ReorderLevel`")
;
    HasMany(x => x.OrderDetails)
      .KeyColumn("`ProductID`")
      .AsBag()
      .Inverse()
      .Cascade.None()
;
    References(x => x.Category)
      .Column("`CategoryID`");
  }
}
}

Product エンティティとマッピングにプロパティ CategoryID を追加できません。これは、2 回マッピングされるためです。解決策はありますか?

4

1 に答える 1

0

はい。UIでドメインエンティティを使用しないでください。
UIがドメインオブジェクトのすべてのプロパティを必要としない(そして認識してはならない)場合があります。また、異なるドメインソースからのデータ(たとえば、画面のsの
リスト)を含むDTOが必要な場合や、場合のように、データをわずかに異なる方法で表す必要がある場合もあります。 したがって、最良の方法は、UIに必要なすべての(そして唯一の)プロパティを使用してDTOを作成することです。 詳細については、このSOの質問を参照してください。CourseNameStudent

于 2012-11-05T20:48:03.133 に答える