我有一個SQL Server數據庫,它有很多表。 每個表都有一個主列,實際上它是一個GUID列。 我已經創建了新的ASP.NET動態數據站點來管理這些表。問題是,沒有生成GUID,這就是爲什麼該網站中斷所有表格的原因。如何使用ASP.NET動態數據創建網站時自動生成GUID?
我嘗試通過在SQL表中添加「newID()」,但它仍然失敗。 我相信我需要以某種方式在代碼中進行更改。我相信這可能是許多使用ASP.Net動態網站的開發人員所面臨的問題。想知道如何解決這個問題?
我有一個SQL Server數據庫,它有很多表。 每個表都有一個主列,實際上它是一個GUID列。 我已經創建了新的ASP.NET動態數據站點來管理這些表。問題是,沒有生成GUID,這就是爲什麼該網站中斷所有表格的原因。如何使用ASP.NET動態數據創建網站時自動生成GUID?
我嘗試通過在SQL表中添加「newID()」,但它仍然失敗。 我相信我需要以某種方式在代碼中進行更改。我相信這可能是許多使用ASP.Net動態網站的開發人員所面臨的問題。想知道如何解決這個問題?
我想我欺騙了,但我剛剛創建了一個新的GUID字段模板。 使用爲您的課程創建擴展元數據。這裏顯示縮短的版本。並將其與您的班級相關聯。
然後將GUID.ascx和GUID_Edit.ascx添加到您的項目中。當你插入一條新記錄時,一個GUID將被生成並顯示在你的表格中。關鍵是使UIHint成爲GUID類型。下面
代碼...
--- EventCalendarMetadata.cs
namespace DFEventsWeb
{
[MetadataType(typeof (EventCalendar_Metadata)) ]
public partial class EVENT_CALENDAR
{
[DisplayName("EVENTS")]
private abstract class EventCalendar_Metadata
{
[Display(Name = "ID")]
[UIHint("GUID")]
public object EVENT_ID { get; set; }
.... other fields removed ...
}
}
}
--- GUID.ascx
<%@ Control Language="C#" CodeBehind="GUID.ascx.cs" Inherits="DFEventsWeb.GUID" %>
<asp:Literal runat="server" ID="Literal1" Text="<%# FieldValueString %>" />
--- GUID.ascx.cs 命名空間DFEventsWeb {
public partial class GUID : System.Web.DynamicData.FieldTemplateUserControl
{
private const int MAX_DISPLAYLENGTH_IN_LIST = 100;
public override string FieldValueString
{
get
{
string value = base.FieldValueString;
if (ContainerType == ContainerType.List)
{
if (value != null && value.Length > MAX_DISPLAYLENGTH_IN_LIST)
{
value = value.Substring(0, MAX_DISPLAYLENGTH_IN_LIST - 3) + "...";
}
}
return value;
}
}
public override Control DataControl
{
get
{
return Literal1;
}
}
}
}
--- GUID_Edit.ascx
<%@ Control Language="C#" CodeBehind="GUID_Edit.ascx.cs" Inherits="DFEventsWeb.GUID_EditField" %>
<asp:Literal ID="Literal1" runat="server" Text='<%# OVERRIDE_GUID %>'></asp:Literal>
--- GUID_Edit.ascx.cs
namespace DFEventsWeb
{
public partial class GUID_EditField : System.Web.DynamicData.FieldTemplateUserControl
{
const int MAX_TEXT_COLUMN_SIZE = 200; // jeh
string m_GUIDString;
public string OVERRIDE_GUID
{
get { return m_GUIDString; }
set { m_GUIDString = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
OVERRIDE_GUID = (FieldValueEditString.Length <= 0 ? System.Guid.NewGuid().ToString() : FieldValueEditString);
}
protected override void ExtractValues(IOrderedDictionary dictionary)
{
dictionary[Column.Name] = ConvertEditedValue(Literal1.Text);
}
public override Control DataControl
{
get
{
return Literal1;
}
}
}
}
我在~PageTemplates \ Insert.aspx中的FormView控件的「插入」事件中添加了以下代碼。
e.Values.Add("Id", Guid.NewGuid());
正如我所有的表都有一致的命名convension作爲ID代表PK列,我很好利用這個硬編碼的列名,否則,你可能需要編寫適當的邏輯尋找PK列。