小编Sim*_*sen的帖子

代码首先TPT和级联删除

我正在使用EF4.1代码优先和TPT(每类型表)继承.我有这样的结构

public class Customer 
{
    public virtual ICollection<Product> Products {get; set;}
}

public class Product
{
   [Required]
   public int Id { get; set; }

   [Required]
   public virtual Customer {get; set;}

   public decimal Price { get; set; }
}

public class SpecializedProduct : Product
{
   public string SpecialAttribute { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我删除客户时,我希望删除与该客户关联的所有产品.我可以在Customer和Product之间指定一个WillCascadeOnDelete(true):

modelBuilder.Entity<Customer>().HasMany(e => e.Products).WithRequired(p => p.Customer).WillCascadeOnDelete(true);
Run Code Online (Sandbox Code Playgroud)

但是,由于在我尝试删除客户时,SpecializedProduct和Product之间存在异常关键关系,因此会出现异常:

DELETE语句与REFERENCE约束"SpecializedProduct _TypeConstraint_From_Product_To_SpecializedProduct"冲突.冲突发生在数据库"Test",表"dbo.SpecializedProduct",列"Id"中.该语句已终止.

如果我在SpecializedProduct _TypeConstraint_From_Product_To_SpecializedProduct约束上手动设置一个删除级联,它可以工作,但我希望能够使用模型构建器或代码中的其他方式指定它.这可能吗?

提前致谢!

最好的祝福

西蒙

ef-code-first entity-framework-4.1

10
推荐指数
1
解决办法
1626
查看次数

Uri.IsWellFormedUriString需要更新吗?

我想我可能在Uri.IsWellFormedUriString方法中发现了一个错误,可能是因为它只符合RFC 2396RFC 2732标准,而不是新的RFC 3986,这使得前面提到的两个过时了.

我认为发生的是任何非us-ascii字符都会使它失败,所以带有æ,ø,ö或å等字符的url会使它返回false.由于现在允许这些类型的字符(维基百科和其他人使用它们),我认为Uri.IsWellFormedUriString应该接受它们.下面的正则表达式取自RFC 3986.

你怎么看?Uri课程应该更新吗?

无论如何这里是一些显示错误的示例代码:

static void Main(string[] args)
        {
            var urls = new []
                           {
                               @"/aaa/bbb/cccd",
                               @"/aaa/bbb/cccæ",
                               @"/aaa/bbb/cccø",
                               @"/aaa/bbb/cccå"
                           };

            var regex = new Regex(@"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?");

            Debug.WriteLine("");

            foreach (var url in urls)
            {
                if (Uri.IsWellFormedUriString(url, UriKind.Relative))
                    Debug.WriteLine(url + " is a wellformed Uri");

                if (regex.IsMatch(url))
                    Debug.WriteLine(url + " passed the Regex");

                Debug.WriteLine("");
            }
}
Run Code Online (Sandbox Code Playgroud)

输出:

/aaa/bbb/cccd is a wellformed Uri
/aaa/bbb/cccd passed the Regex

/aaa/bbb/cccæ passed the Regex

/aaa/bbb/cccø …
Run Code Online (Sandbox Code Playgroud)

.net c# regex uri

6
推荐指数
1
解决办法
4148
查看次数

标签 统计

.net ×1

c# ×1

ef-code-first ×1

entity-framework-4.1 ×1

regex ×1

uri ×1