Guid 如何在使用ASP.NET动态数据创建站点时自动生成GUI?

Guid 如何在使用ASP.NET动态数据创建站点时自动生成GUI?,guid,asp.net-dynamic-data,Guid,Asp.net Dynamic Data,我有一个SQL Server数据库,它有很多表。 每个表都有一个主列,实际上是一个GUID列。 我创建了新的ASP.NET动态数据站点来管理这些表。问题是,没有生成guid,这就是为什么所有表的站点都会中断 我尝试在SQL表中添加“newID()”,但仍然失败。 我相信我需要以某种方式改变代码。我相信这可能是许多使用ASP.Net动态站点的开发人员面临的问题。。知道如何解决这个问题吗?我在~PageTemplates\Insert.aspx中的FormView控件的“插入”事件中添加了以下代码

我有一个SQL Server数据库,它有很多表。 每个表都有一个主列,实际上是一个GUID列。 我创建了新的ASP.NET动态数据站点来管理这些表。问题是,没有生成guid,这就是为什么所有表的站点都会中断

我尝试在SQL表中添加“newID()”,但仍然失败。
我相信我需要以某种方式改变代码。我相信这可能是许多使用ASP.Net动态站点的开发人员面临的问题。。知道如何解决这个问题吗?

我在~PageTemplates\Insert.aspx中的FormView控件的“插入”事件中添加了以下代码

e.Values.Add("Id", Guid.NewGuid());

由于我所有的表都有一个一致的命名约定,因为Id代表PK列,所以我可以使用这个硬编码的列名,否则,您可能需要编写适当的逻辑来查找PK列。

我认为我作弊了,但我刚刚创建了一个新的GUID字段模板。 使用为类创建扩展元数据。此处显示的缩短版本。把它和你的班级联系起来

然后将GUID.ascx和GUID\u 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\u 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\u 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;
            }
        }
    }
}
namespace-DFEventsWeb
{
公共部分类GUID\U EditField:System.Web.DynamicData.FieldTemplateUserControl
{
const int MAX_TEXT_COLUMN_SIZE=200;//jeh
字符串m_GUIDString;
公共字符串覆盖\u GUID
{
获取{return m_GUIDString;}
set{m_GUIDString=value;}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的覆盖无效OnDataBinding(EventArgs e)
{
碱基结合(e);
覆盖\u GUID=(FieldValueEditString.Length
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;
            }
        }
    }
}