以Northwind库为例,新建LINQ TO SQL Classes,我们将表Suppliers和Products拖进新建的dbml文件设计界面。
默认情况下,IDE自动生成的映射关系为1:N.即Cardinality属性为OneToMany即1:N。
如果我们想改为1:1则可选中表关系(图中空心实心箭头),修改Cardinality属性为OneToOne。
但是IDE会报错:Error 1 Cannot create an association "Supplier_Product". Properties do not have matching types: "SupplierID", "SupplierID".
这个错误说明主表主键和从表的外键字段类型不一致,检查发现果然是Products表的外键字段SupplierID为可空类型而主表Suppliers的主键字段为不可空类型。
修改dbml中Products表的SupplierID的Nullable属性为False,然后修改Cardinality属性为OneToOne,成功!
附
1:N的自动生成映射类:
using System.Data.Linq; using System.Data.Linq.Mapping; using System.Data; using System.Collections.Generic; using System.Reflection; using System.Linq; using System.Linq.Expressions; using System.ComponentModel; using System; [System.Data.Linq.Mapping.DatabaseAttribute(Name = "Northwind")] public partial class DataClasses1DataContext : System.Data.Linq.DataContext { private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); #region Extensibility Method Definitions partial void OnCreated(); partial void InsertProduct(Product instance); partial void UpdateProduct(Product instance); partial void DeleteProduct(Product instance); partial void InsertSupplier(Supplier instance); partial void UpdateSupplier(Supplier instance); partial void DeleteSupplier(Supplier instance); #endregion public DataClasses1DataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString, mappingSource) { OnCreated(); } public DataClasses1DataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public System.Data.Linq.Table<Product> Products { get { return this.GetTable<Product>(); } } public System.Data.Linq.Table<Supplier> Suppliers { get { return this.GetTable<Supplier>(); } } } [Table(Name = "dbo.Products")] public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged { private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); private int _ProductID; private string _ProductName; private System.Nullable<int> _SupplierID; private System.Nullable<int> _CategoryID; private string _QuantityPerUnit; private System.Nullable<decimal> _UnitPrice; private System.Nullable<short> _UnitsInStock; private System.Nullable<short> _UnitsOnOrder; private System.Nullable<short> _ReorderLevel; private bool _Discontinued; private EntityRef<Supplier> _Supplier; #region Extensibility Method Definitions partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); partial void OnCreated(); partial void OnProductIDChanging(int value); partial void OnProductIDChanged(); partial void OnProductNameChanging(string value); partial void OnProductNameChanged(); partial void OnSupplierIDChanging(System.Nullable<int> value); partial void OnSupplierIDChanged(); partial void OnCategoryIDChanging(System.Nullable<int> value); partial void OnCategoryIDChanged(); partial void OnQuantityPerUnitChanging(string value); partial void OnQuantityPerUnitChanged(); partial void OnUnitPriceChanging(System.Nullable<decimal> value); partial void OnUnitPriceChanged(); partial void OnUnitsInStockChanging(System.Nullable<short> value); partial void OnUnitsInStockChanged(); partial void OnUnitsOnOrderChanging(System.Nullable<short> value); partial void OnUnitsOnOrderChanged(); partial void OnReorderLevelChanging(System.Nullable<short> value); partial void OnReorderLevelChanged(); partial void OnDiscontinuedChanging(bool value); partial void OnDiscontinuedChanged(); #endregion public Product() { this._Supplier = default(EntityRef<Supplier>); OnCreated(); } [Column(Storage = "_ProductID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int ProductID { get { return this._ProductID; } set { if ((this._ProductID != value)) { this.OnProductIDChanging(value); this.SendPropertyChanging(); this._ProductID = value; this.SendPropertyChanged("ProductID"); this.OnProductIDChanged(); } } } [Column(Storage = "_ProductName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)] public string ProductName { get { return this._ProductName; } set { if ((this._ProductName != value)) { this.OnProductNameChanging(value); this.SendPropertyChanging(); this._ProductName = value; this.SendPropertyChanged("ProductName"); this.OnProductNameChanged(); } } } [Column(Storage = "_SupplierID", DbType = "Int")] public System.Nullable<int> SupplierID { get { return this._SupplierID; } set { if ((this._SupplierID != value)) { if (this._Supplier.HasLoadedOrAssignedValue) { throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException(); } this.OnSupplierIDChanging(value); this.SendPropertyChanging(); this._SupplierID = value; this.SendPropertyChanged("SupplierID"); this.OnSupplierIDChanged(); } } } [Column(Storage = "_CategoryID", DbType = "Int")] public System.Nullable<int> CategoryID { get { return this._CategoryID; } set { if ((this._CategoryID != value)) { this.OnCategoryIDChanging(value); this.SendPropertyChanging(); this._CategoryID = value; this.SendPropertyChanged("CategoryID"); this.OnCategoryIDChanged(); } } } [Column(Storage = "_QuantityPerUnit", DbType = "NVarChar(20)")] public string QuantityPerUnit { get { return this._QuantityPerUnit; } set { if ((this._QuantityPerUnit != value)) { this.OnQuantityPerUnitChanging(value); this.SendPropertyChanging(); this._QuantityPerUnit = value; this.SendPropertyChanged("QuantityPerUnit"); this.OnQuantityPerUnitChanged(); } } } [Column(Storage = "_UnitPrice", DbType = "Money")] public System.Nullable<decimal> UnitPrice { get { return this._UnitPrice; } set { if ((this._UnitPrice != value)) { this.OnUnitPriceChanging(value); this.SendPropertyChanging(); this._UnitPrice = value; this.SendPropertyChanged("UnitPrice"); this.OnUnitPriceChanged(); } } } [Column(Storage = "_UnitsInStock", DbType = "SmallInt")] public System.Nullable<short> UnitsInStock { get { return this._UnitsInStock; } set { if ((this._UnitsInStock != value)) { this.OnUnitsInStockChanging(value); this.SendPropertyChanging(); this._UnitsInStock = value; this.SendPropertyChanged("UnitsInStock"); this.OnUnitsInStockChanged(); } } } [Column(Storage = "_UnitsOnOrder", DbType = "SmallInt")] public System.Nullable<short> UnitsOnOrder { get { return this._UnitsOnOrder; } set { if ((this._UnitsOnOrder != value)) { this.OnUnitsOnOrderChanging(value); this.SendPropertyChanging(); this._UnitsOnOrder = value; this.SendPropertyChanged("UnitsOnOrder"); this.OnUnitsOnOrderChanged(); } } } [Column(Storage = "_ReorderLevel", DbType = "SmallInt")] public System.Nullable<short> ReorderLevel { get { return this._ReorderLevel; } set { if ((this._ReorderLevel != value)) { this.OnReorderLevelChanging(value); this.SendPropertyChanging(); this._ReorderLevel = value; this.SendPropertyChanged("ReorderLevel"); this.OnReorderLevelChanged(); } } } [Column(Storage = "_Discontinued", DbType = "Bit NOT NULL")] public bool Discontinued { get { return this._Discontinued; } set { if ((this._Discontinued != value)) { this.OnDiscontinuedChanging(value); this.SendPropertyChanging(); this._Discontinued = value; this.SendPropertyChanged("Discontinued"); this.OnDiscontinuedChanged(); } } } [Association(Name = "Supplier_Product", Storage = "_Supplier", ThisKey = "SupplierID", OtherKey = "SupplierID", IsForeignKey = true)] public Supplier Supplier { get { return this._Supplier.Entity; } set { Supplier previousValue = this._Supplier.Entity; if (((previousValue != value) || (this._Supplier.HasLoadedOrAssignedValue == false))) { this.SendPropertyChanging(); if ((previousValue != null)) { this._Supplier.Entity = null; previousValue.Products.Remove(this); } this._Supplier.Entity = value; if ((value != null)) { value.Products.Add(this); this._SupplierID = value.SupplierID; } else { this._SupplierID = default(Nullable<int>); } this.SendPropertyChanged("Supplier"); } } } public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; protected virtual void SendPropertyChanging() { if ((this.PropertyChanging != null)) { this.PropertyChanging(this, emptyChangingEventArgs); } } protected virtual void SendPropertyChanged(String propertyName) { if ((this.PropertyChanged != null)) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } [Table(Name = "dbo.Suppliers")] public partial class Supplier : INotifyPropertyChanging, INotifyPropertyChanged { private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); private int _SupplierID; private string _CompanyName; private string _ContactName; private string _ContactTitle; private string _Address; private string _City; private string _Region; private string _PostalCode; private string _Country; private string _Phone; private string _Fax; private string _HomePage; private EntitySet<Product> _Products; #region Extensibility Method Definitions partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); partial void OnCreated(); partial void OnSupplierIDChanging(int value); partial void OnSupplierIDChanged(); partial void OnCompanyNameChanging(string value); partial void OnCompanyNameChanged(); partial void OnContactNameChanging(string value); partial void OnContactNameChanged(); partial void OnContactTitleChanging(string value); partial void OnContactTitleChanged(); partial void OnAddressChanging(string value); partial void OnAddressChanged(); partial void OnCityChanging(string value); partial void OnCityChanged(); partial void OnRegionChanging(string value); partial void OnRegionChanged(); partial void OnPostalCodeChanging(string value); partial void OnPostalCodeChanged(); partial void OnCountryChanging(string value); partial void OnCountryChanged(); partial void OnPhoneChanging(string value); partial void OnPhoneChanged(); partial void OnFaxChanging(string value); partial void OnFaxChanged(); partial void OnHomePageChanging(string value); partial void OnHomePageChanged(); #endregion public Supplier() { this._Products = new EntitySet<Product>(new Action<Product>(this.attach_Products), new Action<Product>(this.detach_Products)); OnCreated(); } [Column(Storage = "_SupplierID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int SupplierID { get { return this._SupplierID; } set { if ((this._SupplierID != value)) { this.OnSupplierIDChanging(value); this.SendPropertyChanging(); this._SupplierID = value; this.SendPropertyChanged("SupplierID"); this.OnSupplierIDChanged(); } } } [Column(Storage = "_CompanyName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)] public string CompanyName { get { return this._CompanyName; } set { if ((this._CompanyName != value)) { this.OnCompanyNameChanging(value); this.SendPropertyChanging(); this._CompanyName = value; this.SendPropertyChanged("CompanyName"); this.OnCompanyNameChanged(); } } } [Column(Storage = "_ContactName", DbType = "NVarChar(30)")] public string ContactName { get { return this._ContactName; } set { if ((this._ContactName != value)) { this.OnContactNameChanging(value); this.SendPropertyChanging(); this._ContactName = value; this.SendPropertyChanged("ContactName"); this.OnContactNameChanged(); } } } [Column(Storage = "_ContactTitle", DbType = "NVarChar(30)")] public string ContactTitle { get { return this._ContactTitle; } set { if ((this._ContactTitle != value)) { this.OnContactTitleChanging(value); this.SendPropertyChanging(); this._ContactTitle = value; this.SendPropertyChanged("ContactTitle"); this.OnContactTitleChanged(); } } } [Column(Storage = "_Address", DbType = "NVarChar(60)")] public string Address { get { return this._Address; } set { if ((this._Address != value)) { this.OnAddressChanging(value); this.SendPropertyChanging(); this._Address = value; this.SendPropertyChanged("Address"); this.OnAddressChanged(); } } } [Column(Storage = "_City", DbType = "NVarChar(15)")] public string City { get { return this._City; } set { if ((this._City != value)) { this.OnCityChanging(value); this.SendPropertyChanging(); this._City = value; this.SendPropertyChanged("City"); this.OnCityChanged(); } } } [Column(Storage = "_Region", DbType = "NVarChar(15)")] public string Region { get { return this._Region; } set { if ((this._Region != value)) { this.OnRegionChanging(value); this.SendPropertyChanging(); this._Region = value; this.SendPropertyChanged("Region"); this.OnRegionChanged(); } } } [Column(Storage = "_PostalCode", DbType = "NVarChar(10)")] public string PostalCode { get { return this._PostalCode; } set { if ((this._PostalCode != value)) { this.OnPostalCodeChanging(value); this.SendPropertyChanging(); this._PostalCode = value; this.SendPropertyChanged("PostalCode"); this.OnPostalCodeChanged(); } } } [Column(Storage = "_Country", DbType = "NVarChar(15)")] public string Country { get { return this._Country; } set { if ((this._Country != value)) { this.OnCountryChanging(value); this.SendPropertyChanging(); this._Country = value; this.SendPropertyChanged("Country"); this.OnCountryChanged(); } } } [Column(Storage = "_Phone", DbType = "NVarChar(24)")] public string Phone { get { return this._Phone; } set { if ((this._Phone != value)) { this.OnPhoneChanging(value); this.SendPropertyChanging(); this._Phone = value; this.SendPropertyChanged("Phone"); this.OnPhoneChanged(); } } } [Column(Storage = "_Fax", DbType = "NVarChar(24)")] public string Fax { get { return this._Fax; } set { if ((this._Fax != value)) { this.OnFaxChanging(value); this.SendPropertyChanging(); this._Fax = value; this.SendPropertyChanged("Fax"); this.OnFaxChanged(); } } } [Column(Storage = "_HomePage", DbType = "NText", UpdateCheck = UpdateCheck.Never)] public string HomePage { get { return this._HomePage; } set { if ((this._HomePage != value)) { this.OnHomePageChanging(value); this.SendPropertyChanging(); this._HomePage = value; this.SendPropertyChanged("HomePage"); this.OnHomePageChanged(); } } } [Association(Name = "Supplier_Product", Storage = "_Products", ThisKey = "SupplierID", OtherKey = "SupplierID")] public EntitySet<Product> Products { get { return this._Products; } set { this._Products.Assign(value); } } public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; protected virtual void SendPropertyChanging() { if ((this.PropertyChanging != null)) { this.PropertyChanging(this, emptyChangingEventArgs); } } protected virtual void SendPropertyChanged(String propertyName) { if ((this.PropertyChanged != null)) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } private void attach_Products(Product entity) { this.SendPropertyChanging(); entity.Supplier = this; } private void detach_Products(Product entity) { this.SendPropertyChanging(); entity.Supplier = null; } }
1:1的自动生成映射类:
using System.Data.Linq; using System.Data.Linq.Mapping; using System.Data; using System.Collections.Generic; using System.Reflection; using System.Linq; using System.Linq.Expressions; using System.ComponentModel; using System; [System.Data.Linq.Mapping.DatabaseAttribute(Name = "Northwind")] public partial class DataClasses1DataContext : System.Data.Linq.DataContext { private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); #region Extensibility Method Definitions partial void OnCreated(); partial void InsertSupplier(Supplier instance); partial void UpdateSupplier(Supplier instance); partial void DeleteSupplier(Supplier instance); partial void InsertProduct(Product instance); partial void UpdateProduct(Product instance); partial void DeleteProduct(Product instance); #endregion public DataClasses1DataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString, mappingSource) { OnCreated(); } public DataClasses1DataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public DataClasses1DataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public System.Data.Linq.Table<Supplier> Suppliers { get { return this.GetTable<Supplier>(); } } public System.Data.Linq.Table<Product> Products { get { return this.GetTable<Product>(); } } } [Table(Name = "dbo.Suppliers")] public partial class Supplier : INotifyPropertyChanging, INotifyPropertyChanged { private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); private int _SupplierID; private string _CompanyName; private string _ContactName; private string _ContactTitle; private string _Address; private string _City; private string _Region; private string _PostalCode; private string _Country; private string _Phone; private string _Fax; private string _HomePage; private EntityRef<Product> _Products; #region Extensibility Method Definitions partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); partial void OnCreated(); partial void OnSupplierIDChanging(int value); partial void OnSupplierIDChanged(); partial void OnCompanyNameChanging(string value); partial void OnCompanyNameChanged(); partial void OnContactNameChanging(string value); partial void OnContactNameChanged(); partial void OnContactTitleChanging(string value); partial void OnContactTitleChanged(); partial void OnAddressChanging(string value); partial void OnAddressChanged(); partial void OnCityChanging(string value); partial void OnCityChanged(); partial void OnRegionChanging(string value); partial void OnRegionChanged(); partial void OnPostalCodeChanging(string value); partial void OnPostalCodeChanged(); partial void OnCountryChanging(string value); partial void OnCountryChanged(); partial void OnPhoneChanging(string value); partial void OnPhoneChanged(); partial void OnFaxChanging(string value); partial void OnFaxChanged(); partial void OnHomePageChanging(string value); partial void OnHomePageChanged(); #endregion public Supplier() { this._Products = default(EntityRef<Product>); OnCreated(); } [Column(Storage = "_SupplierID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int SupplierID { get { return this._SupplierID; } set { if ((this._SupplierID != value)) { this.OnSupplierIDChanging(value); this.SendPropertyChanging(); this._SupplierID = value; this.SendPropertyChanged("SupplierID"); this.OnSupplierIDChanged(); } } } [Column(Storage = "_CompanyName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)] public string CompanyName { get { return this._CompanyName; } set { if ((this._CompanyName != value)) { this.OnCompanyNameChanging(value); this.SendPropertyChanging(); this._CompanyName = value; this.SendPropertyChanged("CompanyName"); this.OnCompanyNameChanged(); } } } [Column(Storage = "_ContactName", DbType = "NVarChar(30)")] public string ContactName { get { return this._ContactName; } set { if ((this._ContactName != value)) { this.OnContactNameChanging(value); this.SendPropertyChanging(); this._ContactName = value; this.SendPropertyChanged("ContactName"); this.OnContactNameChanged(); } } } [Column(Storage = "_ContactTitle", DbType = "NVarChar(30)")] public string ContactTitle { get { return this._ContactTitle; } set { if ((this._ContactTitle != value)) { this.OnContactTitleChanging(value); this.SendPropertyChanging(); this._ContactTitle = value; this.SendPropertyChanged("ContactTitle"); this.OnContactTitleChanged(); } } } [Column(Storage = "_Address", DbType = "NVarChar(60)")] public string Address { get { return this._Address; } set { if ((this._Address != value)) { this.OnAddressChanging(value); this.SendPropertyChanging(); this._Address = value; this.SendPropertyChanged("Address"); this.OnAddressChanged(); } } } [Column(Storage = "_City", DbType = "NVarChar(15)")] public string City { get { return this._City; } set { if ((this._City != value)) { this.OnCityChanging(value); this.SendPropertyChanging(); this._City = value; this.SendPropertyChanged("City"); this.OnCityChanged(); } } } [Column(Storage = "_Region", DbType = "NVarChar(15)")] public string Region { get { return this._Region; } set { if ((this._Region != value)) { this.OnRegionChanging(value); this.SendPropertyChanging(); this._Region = value; this.SendPropertyChanged("Region"); this.OnRegionChanged(); } } } [Column(Storage = "_PostalCode", DbType = "NVarChar(10)")] public string PostalCode { get { return this._PostalCode; } set { if ((this._PostalCode != value)) { this.OnPostalCodeChanging(value); this.SendPropertyChanging(); this._PostalCode = value; this.SendPropertyChanged("PostalCode"); this.OnPostalCodeChanged(); } } } [Column(Storage = "_Country", DbType = "NVarChar(15)")] public string Country { get { return this._Country; } set { if ((this._Country != value)) { this.OnCountryChanging(value); this.SendPropertyChanging(); this._Country = value; this.SendPropertyChanged("Country"); this.OnCountryChanged(); } } } [Column(Storage = "_Phone", DbType = "NVarChar(24)")] public string Phone { get { return this._Phone; } set { if ((this._Phone != value)) { this.OnPhoneChanging(value); this.SendPropertyChanging(); this._Phone = value; this.SendPropertyChanged("Phone"); this.OnPhoneChanged(); } } } [Column(Storage = "_Fax", DbType = "NVarChar(24)")] public string Fax { get { return this._Fax; } set { if ((this._Fax != value)) { this.OnFaxChanging(value); this.SendPropertyChanging(); this._Fax = value; this.SendPropertyChanged("Fax"); this.OnFaxChanged(); } } } [Column(Storage = "_HomePage", DbType = "NText", UpdateCheck = UpdateCheck.Never)] public string HomePage { get { return this._HomePage; } set { if ((this._HomePage != value)) { this.OnHomePageChanging(value); this.SendPropertyChanging(); this._HomePage = value; this.SendPropertyChanged("HomePage"); this.OnHomePageChanged(); } } } [Association(Name = "Supplier_Product", Storage = "_Products", ThisKey = "SupplierID", OtherKey = "SupplierID", IsUnique = true, IsForeignKey = false)] public Product Products { get { return this._Products.Entity; } set { Product previousValue = this._Products.Entity; if (((previousValue != value) || (this._Products.HasLoadedOrAssignedValue == false))) { this.SendPropertyChanging(); if ((previousValue != null)) { this._Products.Entity = null; previousValue.Supplier = null; } this._Products.Entity = value; if ((value != null)) { value.Supplier = this; } this.SendPropertyChanged("Products"); } } } public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; protected virtual void SendPropertyChanging() { if ((this.PropertyChanging != null)) { this.PropertyChanging(this, emptyChangingEventArgs); } } protected virtual void SendPropertyChanged(String propertyName) { if ((this.PropertyChanged != null)) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } [Table(Name = "dbo.Products")] public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged { private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); private int _ProductID; private string _ProductName; private int _SupplierID; private System.Nullable<int> _CategoryID; private string _QuantityPerUnit; private System.Nullable<decimal> _UnitPrice; private System.Nullable<short> _UnitsInStock; private System.Nullable<short> _UnitsOnOrder; private System.Nullable<short> _ReorderLevel; private bool _Discontinued; private EntityRef<Supplier> _Supplier; #region Extensibility Method Definitions partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); partial void OnCreated(); partial void OnProductIDChanging(int value); partial void OnProductIDChanged(); partial void OnProductNameChanging(string value); partial void OnProductNameChanged(); partial void OnSupplierIDChanging(int value); partial void OnSupplierIDChanged(); partial void OnCategoryIDChanging(System.Nullable<int> value); partial void OnCategoryIDChanged(); partial void OnQuantityPerUnitChanging(string value); partial void OnQuantityPerUnitChanged(); partial void OnUnitPriceChanging(System.Nullable<decimal> value); partial void OnUnitPriceChanged(); partial void OnUnitsInStockChanging(System.Nullable<short> value); partial void OnUnitsInStockChanged(); partial void OnUnitsOnOrderChanging(System.Nullable<short> value); partial void OnUnitsOnOrderChanged(); partial void OnReorderLevelChanging(System.Nullable<short> value); partial void OnReorderLevelChanged(); partial void OnDiscontinuedChanging(bool value); partial void OnDiscontinuedChanged(); #endregion public Product() { this._Supplier = default(EntityRef<Supplier>); OnCreated(); } [Column(Storage = "_ProductID", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int ProductID { get { return this._ProductID; } set { if ((this._ProductID != value)) { this.OnProductIDChanging(value); this.SendPropertyChanging(); this._ProductID = value; this.SendPropertyChanged("ProductID"); this.OnProductIDChanged(); } } } [Column(Storage = "_ProductName", DbType = "NVarChar(40) NOT NULL", CanBeNull = false)] public string ProductName { get { return this._ProductName; } set { if ((this._ProductName != value)) { this.OnProductNameChanging(value); this.SendPropertyChanging(); this._ProductName = value; this.SendPropertyChanged("ProductName"); this.OnProductNameChanged(); } } } [Column(Storage = "_SupplierID", DbType = "Int")] public int SupplierID { get { return this._SupplierID; } set { if ((this._SupplierID != value)) { if (this._Supplier.HasLoadedOrAssignedValue) { throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException(); } this.OnSupplierIDChanging(value); this.SendPropertyChanging(); this._SupplierID = value; this.SendPropertyChanged("SupplierID"); this.OnSupplierIDChanged(); } } } [Column(Storage = "_CategoryID", DbType = "Int")] public System.Nullable<int> CategoryID { get { return this._CategoryID; } set { if ((this._CategoryID != value)) { this.OnCategoryIDChanging(value); this.SendPropertyChanging(); this._CategoryID = value; this.SendPropertyChanged("CategoryID"); this.OnCategoryIDChanged(); } } } [Column(Storage = "_QuantityPerUnit", DbType = "NVarChar(20)")] public string QuantityPerUnit { get { return this._QuantityPerUnit; } set { if ((this._QuantityPerUnit != value)) { this.OnQuantityPerUnitChanging(value); this.SendPropertyChanging(); this._QuantityPerUnit = value; this.SendPropertyChanged("QuantityPerUnit"); this.OnQuantityPerUnitChanged(); } } } [Column(Storage = "_UnitPrice", DbType = "Money")] public System.Nullable<decimal> UnitPrice { get { return this._UnitPrice; } set { if ((this._UnitPrice != value)) { this.OnUnitPriceChanging(value); this.SendPropertyChanging(); this._UnitPrice = value; this.SendPropertyChanged("UnitPrice"); this.OnUnitPriceChanged(); } } } [Column(Storage = "_UnitsInStock", DbType = "SmallInt")] public System.Nullable<short> UnitsInStock { get { return this._UnitsInStock; } set { if ((this._UnitsInStock != value)) { this.OnUnitsInStockChanging(value); this.SendPropertyChanging(); this._UnitsInStock = value; this.SendPropertyChanged("UnitsInStock"); this.OnUnitsInStockChanged(); } } } [Column(Storage = "_UnitsOnOrder", DbType = "SmallInt")] public System.Nullable<short> UnitsOnOrder { get { return this._UnitsOnOrder; } set { if ((this._UnitsOnOrder != value)) { this.OnUnitsOnOrderChanging(value); this.SendPropertyChanging(); this._UnitsOnOrder = value; this.SendPropertyChanged("UnitsOnOrder"); this.OnUnitsOnOrderChanged(); } } } [Column(Storage = "_ReorderLevel", DbType = "SmallInt")] public System.Nullable<short> ReorderLevel { get { return this._ReorderLevel; } set { if ((this._ReorderLevel != value)) { this.OnReorderLevelChanging(value); this.SendPropertyChanging(); this._ReorderLevel = value; this.SendPropertyChanged("ReorderLevel"); this.OnReorderLevelChanged(); } } } [Column(Storage = "_Discontinued", DbType = "Bit NOT NULL")] public bool Discontinued { get { return this._Discontinued; } set { if ((this._Discontinued != value)) { this.OnDiscontinuedChanging(value); this.SendPropertyChanging(); this._Discontinued = value; this.SendPropertyChanged("Discontinued"); this.OnDiscontinuedChanged(); } } } [Association(Name = "Supplier_Product", Storage = "_Supplier", ThisKey = "SupplierID", OtherKey = "SupplierID", IsForeignKey = true)] public Supplier Supplier { get { return this._Supplier.Entity; } set { Supplier previousValue = this._Supplier.Entity; if (((previousValue != value) || (this._Supplier.HasLoadedOrAssignedValue == false))) { this.SendPropertyChanging(); if ((previousValue != null)) { this._Supplier.Entity = null; previousValue.Products = null; } this._Supplier.Entity = value; if ((value != null)) { value.Products = this; this._SupplierID = value.SupplierID; } else { this._SupplierID = default(int); } this.SendPropertyChanged("Supplier"); } } } public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; protected virtual void SendPropertyChanging() { if ((this.PropertyChanging != null)) { this.PropertyChanging(this, emptyChangingEventArgs); } } protected virtual void SendPropertyChanged(String propertyName) { if ((this.PropertyChanged != null)) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
可以发现,EntitySet这样集概念的属性变成了EntityRef单体的引用属性