Bugünlerde bir web sitesi yapmaya başladım. Admin tarafını da çok hatta hiç
uğraşmadan ASP.Net Dynamic Data Entities Web Application olarak yaptım. Siteyi yaparken karşılaştığım bir durumu ve çözümünü de sizlerle paylaşmak istiyorum.
Admin tarafında kullanıcı yeni bir ürün eklemek istediğinde sayfa aşağıdaki gibi açılıyordu:

Identity alan olan ProductId alanı da kullanıcının dolduracağı diğer alanlar gibi formda görüntüleniyordu. Ancak bu alanın görüntülenmemesi, değerinin de kullanıcı ürün eklediğinde otomatik olarak atanması gerekiyordu. Bunun için otomatik olarak oluşturulan model’in designer.cs dosyasında ProductId property’sine [ScaffoldColumn(false)] attribute’ini eklemek gerekiyor:
[global::System.Data.Objects.DataClasses.
EdmEntityTypeAttribute(NamespaceName="MyModel", Name="Products")]
[global::System.Runtime.Serialization.
DataContractAttribute(IsReference=true)]
[global::System.Serializable()]
public partial class Products : global::System.Data.Objects.DataClasses.EntityObject
{
/// <summary>
/// Create a new Products object.
/// </summary>
/// <param name="productId">Initial value of ProductId.</param>
/// <param name="productNameTurkish">Initial value of ProductNameTurkish.</param>
public static Products CreateProducts(int productId, string productNameTurkish)
{
Products products = new Products();
products.ProductId = productId;
products.ProductNameTurkish = productNameTurkish;
return products;
}
/// <summary>
/// There are no comments for Property ProductId in the schema.
/// </summary>
[global::System.Data.Objects.DataClasses
.EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public int ProductId
{
get
{
return this._ProductId;
}
set
{
this.OnProductIdChanging(value);
this.ReportPropertyChanging("ProductId");
this._ProductId = global::System.Data.Objects
.DataClasses.StructuralObject.SetValidValue(value);
this.ReportPropertyChanged("ProductId");
this.OnProductIdChanged();
}
}
private int _ProductId;
partial void OnProductIdChanging(int value);
partial void OnProductIdChanged();
Ancak burada dikkat edilmesi gereken bir nokta var. Designer.cs dosyası otomatik olarak oluşturuluyor ve tekrar oluşturulduğunda kodda yaptığınız bu değişiklik silinecektir. Bunu önlemek için de yapmanız gereken bir partial class oluşturup saklamak istediğiniz kolonu attribute ile beraber bu class’a eklemeniz. Böylece model yeniden oluşturulduğunda yaptığınız değişiklikler kaybolmayacaktır:
[MetadataType(typeof(ProductsMetaData))]
public partial class Products
{
}
public class ProductsMetaData
{
[ScaffoldColumn(false)]
public int ProductId
{
get;
set;
}
}