C# 如何创建一个;“非动态”;Guid作为数据库项的值?
我将尝试解释我想要获得什么:C# 如何创建一个;“非动态”;Guid作为数据库项的值?,c#,guid,C#,Guid,我将尝试解释我想要获得什么: 我正在尝试创建Guid值作为数据库项的属性。 我已经检查了其他问题和答案,以解决我的问题,这是我迄今为止得到的模型: public class MyModel { private Guid myGuid = Guid.NewGuid(); public Guid MyGuid { get { return myGuid; } set { myGuid = value; } } } 但问题不在这段代码中
我正在尝试创建Guid值作为数据库项的属性。
我已经检查了其他问题和答案,以解决我的问题,这是我迄今为止得到的模型:
public class MyModel
{
private Guid myGuid = Guid.NewGuid();
public Guid MyGuid
{
get { return myGuid; }
set { myGuid = value; }
}
}
但问题不在这段代码中。因为这样会自动生成Guid值,我可以在视图中验证Guid。但每次我在数据库中编辑一个条目时,Guid都会刷新并更改。这就是为什么我称之为“动态”Guid。
我猜是因为属性MyGuid每次调用数据模型的私有部分时(=Guid.NewGuid();)。
那么,我如何创建一个随机Guid,然后将其设置为MyGuid的值呢 编辑-1 为了创建更精确的Guid生成,我在模型中创建了一个方法。现在,我的模型如下所示:
public class MyModel
{
public string myGuid = Convert.ToString(new Guid());
public string MyMethod(string myValue)
{
var empty = Convert.ToString(new Guid());
if (myValue == null || myValue == empty)
{
var newGuid = Guid.NewGuid();
string stringGuid = Convert.ToString(newGuid);
return stringGuid;
}
else { return myValue;}
}
public Guid MyGuid
{
get { return myGuid; }
set { myGuid = MyMethod(value); }
}
}
在另一个项目的测试中,此方法只工作了一次,然后,当我尝试导入此方法时,它中断并停止工作。使用此方法,当我在数据库中创建条目时,每当我的Guid编辑器字段为空或Guid为零时,它都应该生成Guid.NewGuid(),不是吗?
那么,为什么这段代码在一个辅助项目上工作而在另一个项目上不工作呢?
我遗漏了什么?除了在代码中创建GUID之外,您还可以在数据库中创建GUID,就像这样插入时一样
DECLARE @ID uniqueidentifier
SET @ID = NEWID()
除了在代码中创建GUID之外,您还可以在数据库中创建GUID,就像这样插入
DECLARE @ID uniqueidentifier
SET @ID = NEWID()
你应该让它更接近第一个模型IMHO 您可以简单地添加一个以Guid为参数的构造函数
public class MyModel
{
private Guid myGuid;
public MyModel()
{
myGuid = Guid.NewGuid();
}
public MyModel(Guid guid)
{
myGuid = guid;
}
public Guid MyGuid
{
get { return myGuid; }
set { myGuid = value; }
}
}
你应该让它更接近第一个模型IMHO 您可以简单地添加一个以Guid为参数的构造函数
public class MyModel
{
private Guid myGuid;
public MyModel()
{
myGuid = Guid.NewGuid();
}
public MyModel(Guid guid)
{
myGuid = guid;
}
public Guid MyGuid
{
get { return myGuid; }
set { myGuid = value; }
}
}
为什么不在构造函数中设置它呢?在加载
MyModel
时,可能没有从数据库中正确填充MyGuid。NewGuid
将作为对象构造的一部分出现,之后应该用您的DB值覆盖它——假设您正确地加载了它!如果加载正确,那么我猜您没有将其作为隐藏值存储在视图中
,因此在发回时,它认为您正在创建新记录,而不是编辑现有记录。没有更多的上下文,只是一种预感。如果您正在将Guid写入数据库,并且希望从数据库中读回Guid,则必须以某种方式使用数据库中的值填充模型。当前所有代码显示的是,每次创建模型实例时都会创建一个新的Guid。将Guid
威胁为字符串并不是一个好主意。你的类处理Guid
,威胁它们为。为什么不在构造函数中设置它?加载MyModel
时,你可能没有从数据库中正确填充MyGuid。NewGuid
将作为对象构造的一部分出现,之后应该用您的DB值覆盖它——假设您正确地加载了它!如果加载正确,那么我猜您没有将其作为隐藏值存储在视图中
,因此在发回时,它认为您正在创建新记录,而不是编辑现有记录。没有更多的上下文,只是一种预感。如果您正在将Guid写入数据库,并且希望从数据库中读回Guid,则必须以某种方式使用数据库中的值填充模型。当前所有代码显示的是,每次创建模型实例时都会创建一个新的Guid。将Guid
威胁为字符串并不是一个好主意。你的类处理Guid
,威胁他们为。我试过这个。但每次我创建一个条目时,它总是不返回新的Guid…我尝试了这个。但每次我创建一个条目时,它总是不返回新的Guid。。。